覆盖 Odoo 9 中的 javascript 函数
Overriding javascript function in 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.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);
});
},
});
});
我想在 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);
});
},
});
});