在Odoo 8上运行客户端JavaScript而不加载新的(空白)视图
问题描述:
我需要在Odoo 8中的表单视图中的按钮运行一些客户端JavaScript。此按钮运行一个Python方法返回此字典:在Odoo 8上运行客户端JavaScript而不加载新的(空白)视图
{"type": "ir.actions.client",
"tag": "my_module.do_something",}
do_something在.js文件定义如下:
openerp.my_module = function (instance) {
instance.web.client_actions.add("my_module.do_something", "instance.my_module.Action");
instance.my_module.Action = instance.web.Widget.extend({
init: function() {
// Do a lot of nice things here
}
});
};
现在,JavaScript是加载并正确执行,但即使启动初始化函数之前,Odoo加载一个全新的,空白视图,一旦JavaScript结束,我无法浏览任何其他菜单条目。事实上,无论我点击我得到这个错误:
Uncaught TypeError: Cannot read property 'callbackList' of undefined
我所需要的,而不是为运行从那里按钮所属的表单视图的JavaScript,而无需加载一个新的观点,这样既得到了JavaScript的东西做,所有回调和整个环境保持良好状态。我的直觉是,我不应该重写init函数(或者可能整个事情都坏了,我对Odoo客户端js来说是个新手),但是我找不到docs既不是一个很好的例子,我想要的方式。任何想法得到这个?
答
对不起,我不上,因为V8大量的时间工作,我不记得如何添加,但是这可能会帮助您:https://github.com/odoo/odoo/blob/8.0/doc/howtos/web.rst
另外,如果你搜索到V8引擎的代码库您可以找到一些客户端动作发生web
模块文档https://github.com/odoo/odoo/search?utf8=%E2%9C%93&q=instance.web.client_actions.add
答
感谢指针simahawk张贴在另一个答案,我已经能够解决我的js,现在正在做我所需要的。供您参考,代码如下:
openerp.my_module = function (instance) {
instance.web.client_actions.add("my_module.do_something", "instance.my_module.action");
instance.my_module.action = function (parent, action) {
// Do a lot of nice things here
}
};
感谢simahawk,你让我的一天!在github上搜索的链接找到了我需要的很多例子,并且我已经能够修复我的功能。奖励! – warp10