2012-01-11 14 views
5

tabanını geçersiz kılmak nasıl.OpenERP web istemcisi 6.1: Böyle "on_logout" gibi bazı OpenERP web js çekirdek işlevlerini geçersiz kılmak için bir yol arıyorum javascript fonksiyonları

openerp.mytest = function(openerp){ 

    openerp.web.WebClient = openerp.web.WebClient.extend({ 
     on_logout: function() { 
      alert('mine'); 
      [...] 
     }, 
    }); 
} 
:

(eğer my post de görebileceğiniz gibi) talimatların docs eksikliği ve helloworld module Bunu yapmamın benim modülde

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

}; 

gibi bunu yapabilir söyleyen

Bu tanımın dışında bir uyarı koyduğundan beri js yüklendi biliyorum.

burada yanlış olan nedir? Eğer prototipi değiştirmek istediğiniz beri (sınıf, eğer olacaktır) somut olarak gösterilmiş bir nesnenin özel bir sorun biraz var

cevap

4

(WebClient örneği sisteminin kök, bu nedenle zaten muhtemelen Kodunuz yüklenince, yeni bir WebClient "sınıfı" oluşturduğunuzda, mevcut örneği değiştirmeyecektir.

Bu durumda, sınıfı bir alt sınıfla değiştiremezsiniz, sınıfı (Ruby'ye benzer bir şekilde) yeniden açmanız gerekir, çünkü sınıf nesnelerine include yönteminin olması gerekir, bu olmalıdır. eser:

openerp.mytest = function(openerp) { 
    openerp.web.WebClient.include({ 
     on_logout: function() { 
      alert('mine'); 
      this._super.apply(this, arguments); 
     } 
    }); 
} 

(Ruby gibi this._super yerinde sınıfı değişiklikler için, eğer varsa, değiştirmekte olduğunuz yönteme bağlıdır)

Eğer view_list_editable.js uygulama dosyasını kontrol edin

, listview'in kodunu yeniden açıp değiştirmesi gerektiğinden bunun örneklerini sunar Düzenlenebilirlik eklemek için n.

+1

Merhaba, cevapladığınız için teşekkürler. Bunu denedim ama çalışmıyor. Orijinal olanı kullanmaya devam ediyor. FWIW En son sürümü aldım. – simahawk

+1

cehennem Oh, bunu bir "geri" olduğunu unutmuştum ('on_ *' ve 'do_ *' yöntemleri sınıf nasılsa 'openerp.web.CallbackEnabled' uzanır init' eğer' sırasında durumlarda doğrudan bağlıdırlar) ve Herhangi bir modül yüklenmeden önce 'WebClient 'girilir. Tek çözümünüz, ham javascript kullanmak ve 'openerp.webclient' (bu oturum için varsa, webclient örneği) 'ye erişmek ve doğrudan değiştirmek. Openerp.webclient.on_logout.add_first (function() {console.log ('benim çıkışım')}) gibi bir şey. On_logout'un değiştirilmesi muhtemelen işe yaramaz çünkü etkinlikler hevesle bağlıdır (kötü bir fikir). – xmo

+0

I güvenilir: openerp.mytest = fonksiyonu (OpenERP) { openerp.webclient.on_logout.add_first ('! Thatsme' fonksiyonu() { uyarı(); } ); } ama görünmek var yararsız hem de :( – simahawk

İlgili konular