首先OWL是Odoo14版本新加的功能。

因为是新加的所以并没有太多的说明文档,包括英文板文档也没有;所以你要用它再没有更详细的文档之前你得自己去看源码。

注意owl是没有do_action函数给你跳转至其他视图的。你如果要你的控件可以跳转视图的话就得用“web.AbstractField”去实现了。

owl如何访问记录res_id(或者其他记录信息):

1 this.record.res_id

owl例子:

 1 odoo.define('my_company_users_widget', function (require) {
2 "use strict";
3
4 const { Component } = owl;
5 const AbstractField = require('web.AbstractFieldOwl');
6 const fieldRegistry = require('web.field_registry_owl');
7
8 //这里生成子控件
9 class UserCardInfo extends Component {
10 static template = 'UserCardInfo';
11 CardClicked() {
12 this.trigger('card-clicked', {user_id: this.props.user_id});
13 }
14 }
15
16 class FieldCompanyUser extends AbstractField {
17 static supportedFieldTypes = ['many2many'];
18 static template = 'OWLFieldCompanyUsers';
19 static components = { UserCardInfo };//子控件声明,这样你就可以在界面上使用了
20 constructor(...args) {
21 super(...args);
22 this.data_users = [];
23 }
24 async willStart() {
25 self = this
26 //
27 //
28 await this.rpc({
29 model: 'res.groups',
30 method: 'get_company_users',
31 args: [[self.record.res_id],self.record.res_id]
32 }).then(function (result){
33 self.data_users = result
34 });
35 }
36 UserCardClicked(ev) {
37 console.log(ev.detail.user_id);
38 self = this;
39 this.rpc({//不知道怎么用rpc40 model: 'res.users',
41 method: 'get_userform_action',
42 args: [[ev.detail.user_id]]
43 }).then(function (result){
44 self.action = result;
45 });
46 console.log(self.action);
47
48 //owl是没有do_action函数给你跳转至其他视图的
49 // this.do_action({
50 // name: 'User Info',
51 // type: 'ir.actions.act_window',
52 // res_model: 'res.users',
53 // view_mode: 'form',
54 // view_type: 'form',
55 // views:[false, 'form'],
56 // target: 'current',
57 // res_id: ev.detail.user_id,
58 // flags: {'form': {'action_buttons': true, 'options': {'mode': 'edit'}}},
59 // context: {}
60 // });
61 }
62 }
63
64 fieldRegistry.add('company_users', FieldCompanyUser);
65
66 return {
67 FieldCompanyUser: FieldCompanyUser,
68 };
69 });

以下是template代码

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <templates>
3 <t t-name="UserCardInfo" owl="1">
4 <div class="card mt16" >
5 <div class="card-body" t-on-click="CardClicked" >
6 <h5 class="card-title mt8">
7 <t t-esc="props.user_name"/>
8 </h5>
9 </div>
10 </div>
11 </t>
12
13 <div t-name="OWLFieldCompanyUsers" owl="1" t-on-card-clicked="UserCardClicked">
14 <div class="row ml16 mr16" >
15 <t t-foreach="data_users" t-as="itemUser">
16 <UserCardInfo user_name="itemUser['name']" user_id="itemUser['id']" active='false'/>
17 </t>
18 </div>
19 </div>
20
21 </templates>

Odoo14 OWL 如何访问model方法和res_id的更多相关文章

  1. ASP.NET MVC 5 学习教程:Edit方法和Edit视图详解

    原文 ASP.NET MVC 5 学习教程:Edit方法和Edit视图详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 ...

  2. 【译】ASP.NET MVC 5 教程 - 7:Edit方法和Edit视图详解

    原文:[译]ASP.NET MVC 5 教程 - 7:Edit方法和Edit视图详解 在本节中,我们继续研究生成的Edit方法和视图.但在研究之前,我们先将 release date 弄得好看一点.打 ...

  3. ThinkPHP的D方法和M方法的区别

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

  4. Hibernate中evict方法和clear方法说明

    Hibernate中evict方法和clear方法说明 先创建一个对象,然后调用session.save方法,然后调用evict方法把该对象清除出缓存,最后提交事务.结果报错: Exception i ...

  5. Android HTTP实例 使用GET方法和POST方法发送请求

    Android HTTP实例 使用GET方法和POST方法发送请求 Web程序:使用GET和POST方法发送请求 首先利用MyEclispe+Tomcat写好一个Web程序,实现的功能就是提交用户信息 ...

  6. $(document).ready()即$()方法和window.onload方法的比较

    以浏览器装载文档为例,我们都知道在页面完毕后,浏览器会通过JavaScript为DOM元素添加事件.在常规的JavaScript代码中,通常使用window.onload方法,而在jQuery中,使用 ...

  7. wait方法和sleep方法的区别

    一.概念.原理.区别 Java中的多线程是一种抢占式的机制而不是分时机制.线程主要有以下几种状态:可运行,运行,阻塞,死亡.抢占式机制指的是有多个线程处于可运行状态,但是只有一个线程在运行.      ...

  8. M方法和D方法的区别

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

  9. ThinkPHP 中M方法和D方法详解----转载

    转载的地址,http://blog.163.com/litianyichuanqi@126/blog/static/115979441201223043452383/ 自己学到这里的时候,不能清除的分 ...

随机推荐

  1. linux-ext4格式文件误删除,该如何恢复?

    在开始进行实验之前,我已经新建了一个空目录/data,并将该目录挂载了一块新硬盘,将硬盘分区格式化为ext4的格式,所以当我操作/data目录下的文件及文件夹的时候,实际上就是针对新挂载的硬盘进行数据 ...

  2. 字节开源RPC框架Kitex的日志库klog源码解读

    前言 这篇文章将着重于分析字节跳动开源的RPC框架Kitex的日志库klog的源码,通过对比Go原生日志库log的实现,探究其作出的改进. 为了平滑学习曲线,我写下了这篇分析Go原生log库的文章,希 ...

  3. Java 基础常见知识点&面试题总结(上),2022 最新版!| JavaGuide

    你好,我是 Guide.秋招即将到来,我对 JavaGuide 的内容进行了重构完善,公众号同步一下最新更新,希望能够帮助你. 基础概念与常识 Java 语言有哪些特点? 简单易学: 面向对象(封装, ...

  4. 快速 IO

    IO 的进化史 cin和cout 刚开始学的时候,老师叫我们用 cin 和 cout 大概是因为这最简单吧 cin>>x; cout<<x scanf和printf 学到函数了 ...

  5. mysql中max_connections与max_user_connections使用区别

    问题描述:把max_connections和max_user_connections参数进行分析测试,顾名思义,max_connections就是负责数据库全局的连接数,max_user_connec ...

  6. spring boot用ide新建项目遇到的restcontroller不能导入的问题

    才开始学习spring boot,第一个程序helloworld就碰到@RestController和@RequestMapping(/hello)的注解都会报错的问题. 我个人的解决方法: 1.sp ...

  7. 利用XtraDiagram.DiagramControl进行流程图形的绘制和控制

    DevExpress提供了一个比较强大的图形绘制工具,可以用于绘制各种图形,如流程图.组织机构图等等,本篇随笔介绍XtraDiagram.DiagramControl的使用,以及利用代码对其属性进行控 ...

  8. HDLBits->Circuits->Arithmetic Circuitd->3-bit binary adder

    Verilog实例数组 对于一个定义好的简单module,例如加法器之类,如果我们要对其进行几十次几百次的例化,并且这些例化基本都是相同的形式,那么我们肯定不能一个个的单独对其进行例化,此时我们就可以 ...

  9. ASP.NET MVC之读取服务器文件资源的两种方式

    初次认识asp.net mvc时,以为所有文件都需要走一遍路由,然后才能在客户端显示, 所以我首先介绍这一种方式 比如说:我们在服务器上有图片: ~/resource/image/5.jpg 我们就需 ...

  10. 不同network中的两个docker容器

    1. 创建docker网络 docker network create --subnet 172.18.0.1/16 test docker network ls 2. 创建两个容器指定docker ...