首先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. ELK 1.3之kibana

    1.安装kibana,直接压缩包安装就可以,kibana默认端口5601 2.配置kibana配置文件 [root@kibana config]# vim /opt/kibana/config/kib ...

  2. spring boot rest controller 自定义反序列化 Date 格式

    @JsonFormat(pattern = DatePattern.NORM_DATE_PATTERN) private Date time;

  3. k8s系列--node(k8s节点介绍,新增节点,移除节点)

    一.简介 Node是Pod真正运行的主机,可以是物理机也可以是虚拟机. Node本质上不是Kubernetes来创建的, Kubernetes只是管理Node上的资源. 为了管理Pod,每个Node节 ...

  4. 113_Power Pivot 销售订单之重复购买率及购买间隔天数相关

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 1.背景 在论坛中看到朋友在提复购率(重复购买率)等相关问题,今天把结果贴出来. 问题原贴:计算订单中的老顾客复购率 感谢 ...

  5. PyTorch框架起步

    PyTorch框架基本处理操作 part1:pytorch简介与安装 CPU版本安装:pip install torch1.3.0+cpu torchvision0.4.1+cpu -f https: ...

  6. goose消元

    ps.改了标题 魔板 思路:按序消除变量,用当前行(i)[行i消\(x_i\)元素],消后面的每一行的i元素 最后按逆序回代值 注意若有i~n行i元素系数都为0说明没有唯一解(其余x的解跟i元素有关) ...

  7. 背包,子集和以及 (max, +) 卷积在特殊情形下的求法

    背包,子集和以及 (max, +) 卷积在特殊情形下的求法 子集和 1:总重量不太大 有 \(n\) 个物品,每个物品重量为 \(w_i\),且 \(\sum\limits_{i} w_i=C\).你 ...

  8. 软件性能测试分析与调优实践之路-JMeter对RPC服务的性能压测分析与调优-手稿节选

    一.JMeter 如何通过自定义Sample来压测RPC服务 RPC(Remote Procedure Call)俗称远程过程调用,是常用的一种高效的服务调用方式,也是性能压测时经常遇到的一种服务调用 ...

  9. junit 5 - Display Name 展示名称

    本文地址:https://www.cnblogs.com/hchengmx/p/14883563.html @DisplayName可以给 测试类 或者 测试方法来自定义显示的名称.可以支持 空格.特 ...

  10. 20.LVS负载均衡群集—NAT模式实例

    LVS负载均衡群集-NAT模式实例 目录 LVS负载均衡群集-NAT模式实例 群集引用概述 群集的含义 问题 解决方法 企业群集分类 群集的三种类型 负载均衡群集(Load Balance Clust ...