Openerp 如何在树状视图标题(创建和导入按钮旁边)中创建按钮并赋予其功能?在奥多9

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'],

我正在尝试在销售订单模块的树状视图中添加一个按钮,位于创建和导入按钮旁边。该按钮将执行python方法

我已经创建了我的自定义模块,扩展销售订单模块,然后,我按照以下步骤操作:

步骤1:在my_module/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”文件。