Odoo:odoo 树视图 header 中的自定义按钮不会触发 python 功能
Odoo: Custom button in the header of odoo tree view doesnt trigger python function
基本信息:
Odoo 版本:10.0
模块名称 : simcard
型号名称 : simcard.simcard
Aim : 在树视图的 header 中添加同步按钮,并将其 link 添加到 python 函数中。
我的模板文件(template.xml):
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-extend="ListView.buttons">
<t t-jquery="button.o_list_button_add" t-operation="replace">
<t t-if="widget.model=='simcard.simcard'">
<button class="btn btn-sm btn-default sync_button" type="button" >Sync</button>
</t>
</t>
</t>
</templates>
我的 javascript 文件(tree_view_button.js):
odoo.define('simcard.tree_view_button', function (require){"use strict";
var ListView = instance.web.ListView;
ListView.include({
render_buttons: function() {
// GET BUTTON REFERENCE
this._super.apply(this, arguments)
if (this.$buttons) {
var btn = this.$buttons.find('.sync_button')
}
// PERFORM THE ACTION
btn.on('click', this.proxy('do_sync'))
},
do_sync: function() {
new instance.web.Model('simcard.simcard')
.call('my_function', [[]])
.done(function(result) {
alert('done')
})
}
});
}
我的python文件函数(models.py):
def my_function(self):
print 'fooooooooooooooo'
我的查看文件(view.xml):
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="assets_backend" name="tree view menu"
inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript"
src="simcard/static/js/tree_view_button.js">
</script>
</xpath>
</template>
</data>
</odoo>
我的清单文件:
# -*- coding: utf-8 -*-
{
'name': "simcard",
'summary': """
Store them""",
'description': """
Store them""",
# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/master/odoo/addons/base/module/module_data.xml
# for the full list
'category': 'Uncategorized',
'version': '0.1',
# any module necessary for this one to work correctly
'depends': ['base'],
# always loaded
'data': [
# 'security/ir.model.access.csv',
'views/views.xml',
'views/templates.xml',
],
'qweb': ['static/xml/tree_view_button.xml'],
# only loaded in demonstration mode
'demo': [
'demo/demo.xml',
],
'installable': True,
'auto_install': False,
'application': True,
}
同步按钮出现在树视图中 header 但是当我单击该按钮时无法调用我的函数。我有什么遗漏的吗??
你的js代码有一些错误,下面的代码应该可以正常工作
odoo.define('simcard_piavita.tree_view_button', function (require){
"use strict";
var ListView = require('web.ListView');
var Model = require('web.DataModel');
ListView.include({
render_buttons: function() {
this._super.apply(this, arguments)
if (this.$buttons) {
var btn = this.$buttons.find('.sync_button')
btn.on('click', this.proxy('do_sync'))
}
},
do_sync: function() {
new Model('simcard_piavita.simcard_piavita')
.call('my_function', [[]])
.done(function(result) {
alert('done')
})
}
});
});
基本信息:
Odoo 版本:10.0
模块名称 : simcard
型号名称 : simcard.simcard
Aim : 在树视图的 header 中添加同步按钮,并将其 link 添加到 python 函数中。
我的模板文件(template.xml):
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-extend="ListView.buttons">
<t t-jquery="button.o_list_button_add" t-operation="replace">
<t t-if="widget.model=='simcard.simcard'">
<button class="btn btn-sm btn-default sync_button" type="button" >Sync</button>
</t>
</t>
</t>
</templates>
我的 javascript 文件(tree_view_button.js):
odoo.define('simcard.tree_view_button', function (require){"use strict";
var ListView = instance.web.ListView;
ListView.include({
render_buttons: function() {
// GET BUTTON REFERENCE
this._super.apply(this, arguments)
if (this.$buttons) {
var btn = this.$buttons.find('.sync_button')
}
// PERFORM THE ACTION
btn.on('click', this.proxy('do_sync'))
},
do_sync: function() {
new instance.web.Model('simcard.simcard')
.call('my_function', [[]])
.done(function(result) {
alert('done')
})
}
});
}
我的python文件函数(models.py):
def my_function(self):
print 'fooooooooooooooo'
我的查看文件(view.xml):
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="assets_backend" name="tree view menu"
inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript"
src="simcard/static/js/tree_view_button.js">
</script>
</xpath>
</template>
</data>
</odoo>
我的清单文件:
# -*- coding: utf-8 -*-
{
'name': "simcard",
'summary': """
Store them""",
'description': """
Store them""",
# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/master/odoo/addons/base/module/module_data.xml
# for the full list
'category': 'Uncategorized',
'version': '0.1',
# any module necessary for this one to work correctly
'depends': ['base'],
# always loaded
'data': [
# 'security/ir.model.access.csv',
'views/views.xml',
'views/templates.xml',
],
'qweb': ['static/xml/tree_view_button.xml'],
# only loaded in demonstration mode
'demo': [
'demo/demo.xml',
],
'installable': True,
'auto_install': False,
'application': True,
}
同步按钮出现在树视图中 header 但是当我单击该按钮时无法调用我的函数。我有什么遗漏的吗??
你的js代码有一些错误,下面的代码应该可以正常工作
odoo.define('simcard_piavita.tree_view_button', function (require){
"use strict";
var ListView = require('web.ListView');
var Model = require('web.DataModel');
ListView.include({
render_buttons: function() {
this._super.apply(this, arguments)
if (this.$buttons) {
var btn = this.$buttons.find('.sync_button')
btn.on('click', this.proxy('do_sync'))
}
},
do_sync: function() {
new Model('simcard_piavita.simcard_piavita')
.call('my_function', [[]])
.done(function(result) {
alert('done')
})
}
});
});