仅为自定义模块或视图应用JS自定义 - Odoo

时间:2017-01-26 14:39:04

标签: javascript inheritance odoo-9 qweb

我想在我的自定义模块中自定义列表视图填充,所以我继续进行如下操作:

my_custom_module.js:

odoo.define('my_custom_module', function(require){
    'use strict';
    var core = require('web.core');
    var List = core.view_registry.get('list');
    var QWeb = core.qweb;
    List.List.include({
        render: function () {
            var self = this;
            this.$current.html(
                QWeb.render('ListView.rows', _.extend({}, this, {
                        render_cell: function () {
                            return self.render_cell.apply(self, arguments); }
                    })));
            this.pad_table_to(1);
        },
    });
});

在我的XML中:

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <template id="assets_backend" name="my_custom_module assets" inherit_id="web.assets_backend">
        <xpath expr="." position="inside">
            <script src="/my_custom_module/static/src/js/my_custom_module.js" type="text/javascript" />
        </xpath>
    </template>
</odoo>

但问题是这适用于我所有的Odoo模块!

如何指定自定义仅适用于my_custom_module?

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

通过使用<div style="visibility: hidden" id="my_view" /> ,您可以扩展List小部件的现有功能。您需要做的是create your own widget扩展List并将其分配给您的视图

如果您不想要并且想继续使用已有的方法,可以在视图中插入一个元素,该元素将用作可以用作钩子的钩子,以便您可以应用更改只对你的看法。例如,在视图中插入元素:

if ($( "#my_view" ).length) {

// your element exists, that means the javascript code runs on your view and your custom code should be executed.

} else {

// another list is being rendered and you should not run any custom code.
}

然后在你的javascript中:

{{1}}