Tôi đang tìm cách để ghi đè lên một số chức năng cốt lõi của jenerp web js như "on_logout".openerp web client 6.1: cách ghi đè lên các hàm javascript cơ sở
Các tài liệu thiếu hướng dẫn (như bạn có thể thấy trong my post) và helloworld module nói với bạn rằng bạn có thể làm điều đó như
openerp.web_hello = function(openerp) {
openerp.web.SearchView = openerp.web.SearchView.extend({
init:function() {
this._super.apply(this,arguments);
this.on_search.add(function(){console.log('hello');});
}
});
// here you may tweak globals object, if any, and play with on_* or do_* callbacks on them
openerp.web.Login = openerp.web.Login.extend({
start: function() {
console.log('Hello there');
this._super.apply(this,arguments);
}
});
};
Trong mô-đun của tôi, tôi đang làm điều này:
openerp.mytest = function(openerp){
openerp.web.WebClient = openerp.web.WebClient.extend({
on_logout: function() {
alert('mine');
[...]
},
});
}
Tôi biết js được tải kể từ khi đặt cảnh báo bên ngoài định nghĩa này hoạt động.
Có gì sai ở đây?
Xin chào, cảm ơn bạn đã trả lời. Tôi chỉ thử điều này nhưng không hoạt động. Nó tiếp tục sử dụng bản gốc. FWIW Tôi vừa mới phát hành bản phát hành mới nhất. – simahawk
Ồ, tôi quên rằng đây là một phương thức "callback" ('on_ *' và 'do_ *' được liên kết trực tiếp với các cá thể trong 'init' nếu lớp mở rộng' openerp.web.CallbackEnabled' bằng cách nào đó), và 'WebClient' được instanced trước khi bất kỳ module nào được tải. Giải pháp duy nhất của bạn là sử dụng javascript thô và truy cập 'openerp.webclient' (cá thể webclient cho phiên này, nếu có) và thay đổi trực tiếp. Một cái gì đó như 'openerp.webclient.on_logout.add_first (function() {console.log ('logout của tôi')});' works. Thay thế on_logout có thể sẽ không hoạt động vì các sự kiện bị ràng buộc háo hức (một ý tưởng tồi). – xmo
tôi đã cố gắng: openerp.mytest = function (OpenERP) { openerp.webclient.on_logout.add_first ('! Thatsme' function() { alert();} ); } nhưng nó có vẻ vô dụng là tốt: ( – simahawk