我一直在使用QWeb开发一个简单的Odoo 9插件,而且我遇到了无论我做什么都无法成功注册/调用.js文件中的操作的问题。
这个简单应用程序的目的只是创建一个菜单项,其中包含一个调用动作的链接。菜单创建成功,但每次我尝试调用操作时,都会收到以下错误:
Javascript文件尝试使用以下代码注册名为test.DoSomething
的操作:
openerp.test = function(instance, local) {
var _t = instance.web._t,
_lt = instance.web._lt;
instance.web.client_actions.add('test.DoSomething', 'instance.test.DoSomething');
instance.test.DoSomething = instance.web.Widget.extend({
start: function() {
console.log("Doing Something!!!!");
}
});
}
这是从包含以下标记的test.xml
文件引用的:
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<template id="assets_backend" name="test" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/testapp/static/src/js/test.js"/>
</xpath>
</template>
<menuitem id="main_testapp_menu" name="Test App" />
<menuitem id="testapp_menu" name="Test App"
parent="main_testapp_menu" />
<record id="action_home_page" model="ir.actions.client">
<field name="name">Test Home Page</field>
<field name="tag">test.DoSomething</field>
</record>
<menuitem id="home_page_menu" name="Home Page" parent="testapp_menu"
action="action_home_page"/>
</data>
</openerp>
__openerp__.py
文件包含:
{
'name' : 'testapp',
'version': '1.0',
'summary': 'testapp',
'category': 'Tools',
'author': 'Test',
'description':
"""
TEST APP
====================
Simple test application for odoo
""",
'data': [
'test.xml'
],
'depends' : ['web'],
'application': True,
}
是否有更新/不同的方式在Odoo 9中注册操作?即使尝试来自Odoo 8的示例代码也会产生类似的错误。
答案 0 :(得分:4)
我发现代码中没有任何错误,它应该在Odoo 8中工作,只有在没有模块名称不匹配的情况下:
看看SJ中的第一行:openerp.test = function(instance, local) {
此处模块名称很重要,因此您必须将其带入帐户。你不能写openerp.whatever = function(instance, local)
,你应该使用openerp.an_exact_technical_name_of_your_module = function(instance, local)
来让你的JS代码由Odoo执行。
您应该用作an_exact_technical_name_of_your_module
的名称是您的模块的技术名称(即您的Odoo模块的主目录名称),也许它不是test
在您的情况下? (也许是testapp
或其他什么?),所以请使用正确的名称而不是test
,然后应该修复它。
如果您对齐名称并且您的代码仍未执行,那么它应该意味着Odoo在Odoo版本9中更改了JS定义而没有考虑到向后兼容性,那么您将需要编写整个JS代码一种新的样式,即odoo.define('an_exact_technical_name_of_your_module.some_feature', function (require) {
样式...例如,请参考Odoo 9源代码中的一些JS代码,例如this one,尽管你可能会得到所有内容都被更改的表达式,实际上更改是非常肤浅的,你仍然可以依赖于当前文档在JS中内部实现Widgets(Documentation尚未与核心源代码中的更改保持一致),但更一般的事情,如添加/注册新Odoo的功能,你最好考虑在Odoo源代码中寻找例子(比如我referenced上面的那个)