简体   繁体   English

重写Odoo 9中的javascript函数

[英]Overriding javascript function in Odoo 9

I want to disable demo data in sales dashboard in Odoo 9.0. 我想在Odoo 9.0的销售仪表盘中禁用演示数据。 I identified the exact lines in javascript that should be changed to work as I expect. 我在javascript中确定了应更改为可以正常运行的确切行。 This is original code from sales_team/(...)/sales_team_dashboard.js 这是来自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);
    });
},

All I need to change is, actually, this line: 实际上,我需要更改的是以下行:

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

as follows 如下

self.show_demo = false;

I tested the code and it works. 我测试了代码,它可以工作。 However, I would like to keep the original Odoo modules untouched so I would like to override the original javascript from within my own module. 但是,我想保持原始的Odoo模块不变,因此我想从我自己的模块中覆盖原始的javascript。 I tried this: 我尝试了这个:

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;

});

This appears in console after loading the page. 加载页面后,它会出现在控制台中。

dashboard #1  web.assets_backend.js:4447 
dashboard #2  web.assets_backend.js:4447 
dashboard #6  web.assets_backend.js:4447

It seems that the javascript has been run but the render function has not been overriden. 似乎javascript已运行,但render函数尚未被覆盖。 What can I do to override it? 我该怎么做才能覆盖它? Can I check if the function is not overriden later by another module? 我可以检查该功能以后是否被另一个模块覆盖吗?
Is there something I did wrong? 我做错了什么吗? As I am new to JS I am aware I might use javascript anti-patterns. 由于我是JS新手,所以我知道我可能会使用javascript反模式。 Please feel free to point those out. 请随时指出这些。

Please try the below code: 请尝试以下代码:

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);
        });
    },
    });

});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM