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

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

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

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

  1. 1 this.record.res_id

owl例子:

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

以下是template代码

  1. 1 <?xml version="1.0" encoding="UTF-8"?>
  2. 2 <templates>
  3. 3 <t t-name="UserCardInfo" owl="1">
  4. 4 <div class="card mt16" >
  5. 5 <div class="card-body" t-on-click="CardClicked" >
  6. 6 <h5 class="card-title mt8">
  7. 7 <t t-esc="props.user_name"/>
  8. 8 </h5>
  9. 9 </div>
  10. 10 </div>
  11. 11 </t>
  12. 12
  13. 13 <div t-name="OWLFieldCompanyUsers" owl="1" t-on-card-clicked="UserCardClicked">
  14. 14 <div class="row ml16 mr16" >
  15. 15 <t t-foreach="data_users" t-as="itemUser">
  16. 16 <UserCardInfo user_name="itemUser['name']" user_id="itemUser['id']" active='false'/>
  17. 17 </t>
  18. 18 </div>
  19. 19 </div>
  20. 20
  21. 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. k8s系列--node(k8s节点介绍,新增节点,移除节点)

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

  2. 记 iTextSharp 提取中文的问题

    原文 问题 下面的代码中 currentText 能提取到大部分汉字 但是字体为 Non-Embedded Font: AdobeSongStd-Light(Horizontal) 的汉字提取不到 P ...

  3. Vben Admin 源码学习:项目初始化

    0x00 前言 Vue-Vben-Admin 是一个免费开源的中后台模版.使用了最新的vue3,vite2,TypeScript等主流技术开发,开箱即用的中后台前端解决方案考. 本系列本着学习参考的目 ...

  4. Python Beautiful Soup库

    Beautiful Soup库 Beautiful Soup库:https://www.crummy.com/software/BeautifulSoup/ 安装Beautiful Soup: 使用B ...

  5. Jackson多态序列化

    场景 做一个消息中心,专门负责发送消息.消息分为几种渠道,包括手机通知(Push).短信(SMS).邮件(Email),Websocket等渠道. 我定义了一个基类MessageRequest用来接收 ...

  6. Spring Ioc源码分析系列--容器实例化Bean的四种方法

    Spring Ioc源码分析系列--实例化Bean的几种方法 前言 前面的文章Spring Ioc源码分析系列--Bean实例化过程(二)在讲解到bean真正通过那些方式实例化出来的时候,并没有继续分 ...

  7. 文字轮播与图片轮播?CSS 不在话下

    今天,分享一个实际业务中能够用得上的动画技巧. 巧用逐帧动画,配合补间动画实现一个无限循环的轮播效果,像是这样: 看到上述示意图,有同学不禁会发问,这不是个非常简单的位移动画么? 我们来简单分析分析, ...

  8. 2021.06.05【NOIP提高B组】模拟 总结

    T1 题意:给你一个 \(n\) 个点 \(n\) 条边的有向图, 求每个店经过 \(K\) 条边后的边权和.最小边权 \(K\le 10^{10}\) 考试时:一直想着环,结果一直不知道怎么做 正解 ...

  9. Linux服务器安装图形化界面

    Linux服务器安装图形化界面 1.检查有无安装gnome桌面 [root@localhost ~]# rpm -qa |grep gnome 2.查看可安装组件列表 [root@localhost ...

  10. 深度学习与计算机视觉教程(15) | 视觉模型可视化与可解释性(CV通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...