Openerp 如何在树状视图标题(创建和导入按钮旁边)中创建按钮并赋予其功能?在奥多9
我正在尝试在销售订单模块的树状视图中添加一个按钮,位于创建和导入按钮旁边。该按钮将执行python方法 我已经创建了我的自定义模块,扩展销售订单模块,然后,我按照以下步骤操作: 步骤1:在my_module/static/src/xml/qweb.xml中创建按钮:Openerp 如何在树状视图标题(创建和导入按钮旁边)中创建按钮并赋予其功能?在奥多9,openerp,odoo-9,qweb,Openerp,Odoo 9,Qweb,我正在尝试在销售订单模块的树状视图中添加一个按钮,位于创建和导入按钮旁边。该按钮将执行python方法 我已经创建了我的自定义模块,扩展销售订单模块,然后,我按照以下步骤操作: 步骤1:在my_module/static/src/xml/qweb.xml中创建按钮: 跑我的东西 步骤2:将文件添加到我的模块的_openerp.py_uu_u中的qweb部分: 'dependens':['sale'], “数据”:[], 'qweb':['static/src/xml/qweb.xml'],
跑我的东西
步骤2:将文件添加到我的模块的_openerp.py_uu_u中的qweb部分:
'dependens':['sale'],
“数据”:[],
'qweb':['static/src/xml/qweb.xml'],
现在,按钮出现了
步骤3:创建python方法,为my_模块/my_python_file.py中的按钮提供功能:
来自openerp导入api、字段、模型、_
类扩展(models.Model):
_inherit=['sale.order']
@api.multi
def更新\销售\按钮(自我):
...
注意:python方法已经在odoo之外进行了测试,效果良好
如何将此python方法与按钮链接?您需要扩展“ListView”小部件,添加一个单击侦听器。
还可以将“@api.model”装饰器添加到您的方法中,这样您就可以使用“call”方法从js中调用它。
大概是这样的:
ListView = require('web.ListView')
ListView.include({
render_buttons: function() {
// GET BUTTON REFERENCE
this._super.apply(this, arguments)
if (this.$buttons) {
var btn = this.$buttons.find('.update_sales_button')
}
// PERFORM THE ACTION
btn.on('click', this.proxy('do_new_button'))
},
do_new_button: function() {
instance.web.Model('sale.order')
.call('update_sale_button', [[]])
.done(function(result) {
< do your stuff, if you don't need to do anything remove the 'done' function >
})
})
ListView=require('web.ListView')
ListView.include({
渲染按钮:函数(){
//获取按钮引用
this.\u super.apply(this,arguments)
如果(此为$buttons){
var btn=this.$buttons.find('.update\u sales\u button'))
}
//执行动作
btn.on('click',this.proxy('do\u new\u button'))
},
do_new_按钮:函数(){
instance.web.Model('sale.order'))
.call('update_sale_button',[[[]))
.完成(功能(结果){
<完成你的工作,如果你不需要做任何事情,请删除“完成”功能>
})
})
我使用的是odoo 11,我必须在主题初学者的模板中用小部件替换小部件.model
(前者是一个对象,后者是一个字符串)。另外,要将按钮附加到行的末尾,我在查找父div时将t-operation
更改为“append”
:
导入电子邮件订单
我把它放在update\u sales\u button.js文件中,现在在浏览器控制台中显示:未捕获引用错误:update\u sales\u button未定义实例。js:1我认为这取决于您使用的js封装方法。如果您使用的是旧方法:“openerp.your\u object\u name=function(instance,local){}”'您可以使用'instance',否则在新样式'odoo.define('your_widget_name',function(require){})中,您必须通过'require('web.ListView')获取ListView小部件。您可以将其分配给一个变量,如:var ListView=require('web.ListView'),然后只需调用ListView.include({})。请尝试查看“addons/web/static/src/js/views/list_view.js”文件。