2017-03-28 13 views
0

私はOdoo 9.0の販売ダッシュボードでデモデータを無効にします。私は期待どおりに動作するように変更すべきjavascriptの正確な行を特定しました。 これは私が変更する必要があるのは、実際には、このラインであるSALES_TEAM /(...)/ sales_team_dashboard.jsOdoo 9.0のjavascript関数をオーバーライド

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 = false; 
を次のように

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

私はコードをテストし、それが動作します。しかし、オリジナルの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のアンチパターンを使用する可能性があることを認識しています。それらを指摘するように自由に感じてください。

答えて

2

以下のコードてみてください:

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

}); 
+0

は、私が追加され、今では実際に動作するいくつかの欠落宣言がありました、ありがとうございました。重要な変更は、あなたが提案したように、 'extend'の代わりに' include'を使うことでした。どうもありがとうございました。 –

+0

乾杯、あなたは歓迎です –

関連する問題