重写odoo9中的javascript函数

重写odoo9中的javascript函数,javascript,inheritance,odoo-9,Javascript,Inheritance,Odoo 9,我想在Odoo 9.0中禁用销售仪表板中的演示数据。我在javascript中确定了应该更改以按预期工作的确切行。 这是sales_team/(…)/sales_team_dashboard.js的原始代码 render: function() { var super_render = this._super; var self = this; return this.fetch_data().then(function(result){ self.sh

我想在Odoo 9.0中禁用销售仪表板中的演示数据。我在javascript中确定了应该更改以按预期工作的确切行。 这是sales_team/(…)/sales_team_dashboard.js的原始代码

render: function() {
    var super_render = this._super;
    var self = this;

    return this.fetch_data().then(function(result){
        self.show_demo = result && result['nb_opportunities'] == 0;

        var sales_dashboard = QWeb.render('sales_team.SalesDashboard',{
            widget: self,
            show_demo: self.show_demo,
            values: result,
        });
        super_render.call(self);
        $(sales_dashboard).prependTo(self.$el);
    });
},
实际上,我需要改变的是这一行:

self.show_demo = result && result['nb_opportunities'] == 0;
如下

self.show_demo = false;
我测试了代码,它运行正常。但是,我希望保持原始的Odoo模块不变,因此我希望在自己的模块中覆盖原始的javascript。 我试过这个:

odoo.define('my_module.dashboard', function(require) {
"use strict";

console.log('dashboard #1');

var dashboard = require('sales_team.dashboard');

console.log('dashboard #2');
var SalesTeamDashboardView = dashboard.extend({
    template: 'sales_team.SalesDashboard',

    render: function() {
        console.log('dashboard #3');
        var super_render = this._super;
        var self = this;

        return this.fetch_data().then(function(result){
            console.log('dashboard #4');
            self.show_demo = false;

            var sales_dashboard = QWeb.render(template, {
                widget: self,
                show_demo: self.show_demo,
                values: result,
            });
            super_render.call(self);
            console.log('dashboard #5');
            $(sales_dashboard).prependTo(self.$el);
        });
    },
});

console.log('dashboard #6');
//core.view_registry.add('sales_team_dashboard', SalesTeamDashboardView);

return SalesTeamDashboardView;

});
这将在加载页面后显示在控制台中

dashboard #1  web.assets_backend.js:4447 
dashboard #2  web.assets_backend.js:4447 
dashboard #6  web.assets_backend.js:4447
看起来javascript已经运行,但是渲染函数还没有被覆盖。我能做些什么来覆盖它?我是否可以检查该功能稍后是否未被其他模块覆盖?

我做错什么了吗?由于我是JS新手,我知道我可能会使用javascript反模式。请随时指出这些问题。

请尝试以下代码:

odoo.define('my_module.dashboard', function(require) {
"use strict";

console.log('dashboard #1');

var dashboard = require('sales_team.dashboard');

console.log('dashboard #2');
var SalesTeamDashboardView = dashboard.include({

    render: function() {
        console.log('dashboard #3');
        var super_render = this._super;
        var self = this;

        return this.fetch_data().then(function(result){
            console.log('dashboard #4');
            self.show_demo = false;

            var sales_dashboard = QWeb.render(template, {
                widget: self,
                show_demo: self.show_demo,
                values: result,
            });
            super_render.call(self);
            console.log('dashboard #5');
            $(sales_dashboard).prependTo(self.$el);
        });
    },
    });

});

谢谢,我添加了一些缺失的声明,现在它真的起作用了。正如您所建议的,关键的更改是使用
包含
而不是
扩展
。非常感谢。救命啊,我也有同样的问题。请检查这个。