Odoo:操作错误无法在 (Odoo 9 / Open ERP) 上找到客户端操作

Odoo: Action Error Could not find client action on (Odoo 9 / Open ERP)

我一直致力于利用 QWeb 开发一个简单的 Odoo 9 插件,但我 运行 遇到无法成功 register/call 来自 .js 文件的操作的问题不管我做什么。

这个简单应用的目的只是创建一个菜单项,其中 link 调用一个操作。菜单创建成功,但每次我尝试调用该操作时,我都会收到以下错误:

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 中是否有 newer/different 注册动作的方法?即使尝试来自 Odoo 8 的示例代码也会产生类似的错误。

我在提供的代码中没有看到任何错误,它应该在 Odoo 8 中工作,前提是没有模块名称不匹配:

看SJ的第一行:openerp.test = function(instance, local) {这里模块名很重要,所以你要考虑进去。您不能写 openerp.whatever = function(instance, local),您应该使用 openerp.an_exact_technical_name_of_your_module = function(instance, local) 以便让 Odoo 执行您的 JS 代码。

您应该使用的名称 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, although you might get expression that everything is changed, actually changes are quite superficial and you can still depend somehow on current documentation for internal implementation of Widgets in JS (Documentation has not been aligned yet to the changes in core source code), but more general things, like add/register new features to Odoo, you'd better to consider to look for examples in the Odoo sources (like the one I referenced