Odoo14 OWL 如何访问model方法和res_id

首先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({//不知道怎么用rpc
40                 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>

 

posted @ 2021-09-02 15:15  看一百次夜空里的深蓝  阅读(633)  评论(0编辑  收藏  举报