我已经能够使用 xml 创建自定义按钮Add Bro
。
这是 xml
<templates>
<tr t-extend="ListView.buttons">
<t t-jquery="button.o_list_button_add" t-operation="after">
<button id="tahu" name="action" type="object" class="btn btn-sm btn-primary">
Add Bro
</button>
</t>
</tr>
</templates>
我的问题是,如何为该按钮创建操作,当我点击按钮时将调用该操作。我尝试过使用名称 action
创建方法,因此它对按钮的 name
属性进行数学运算,但什么也没发生。
@api.multi
def action(self):
view_ref = self.env['ir.model.data'].get_object_reference('account', 'invoice_form')
view_id = view_ref[1] if view_ref else False
res = {
'type': 'ir.actions.act_window',
'name': _('Customer Invoice'),
'res_model': 'purchase.order',
'view_type': 'form',
'view_mode': 'form',
'view_id': view_id,
'target': 'new',
# 'context': {'default_partner_id': client_id}
}
return res
最佳答案
您需要扩展 ListView
小部件并向按钮添加触发器:
openerp.you_module_name_here = function(instance){
var _t = instance.web._t,
_lt = instance.web._lt;
var QWeb = instance.web.qweb;
instance.web.ListView.include({
load_list: function(data) {
if (this.$buttons) {
this.$buttons.find('#tahu').click(this.proxy('action')) ;
}
},
action: function () {
var model_obj = new instance.web.Model('ir.model.data');
view_id = model_obj.call('get_object_reference', ["account", "invoice_form"]);
this.do_action(
name: _t('Customer Invoice'),
type: 'ir.actions.act_window',
res_model: 'purchase.order',
view_type: 'form',
view_mode: 'form',
view_id: view_id,
target: 'new'
);
}
});
}
在 /static/src/js/
下创建一个包含上述代码的 js
文件 (script.js
) 和一个 xml
文件 (`module_view.xml) 包含以下代码:
<template id="assets_backend_custom" name="custom assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/your_module_name_here/static/src/js/script.js"></script>
</xpath>
</template>
__openerp__.py:
...
'data': [
...
"module_view.xml",
...
],
...
关于python - Odoo 9 如何在自定义按钮上创建操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37322701/