2016-03-25 25 views
1

sadece web sayfasında daha fazla bileşen bulunduğunu hayal edin ve bir bağlantıyı tıklattığımda, tüm sayfayı dolduran ana sayfaya yönlendiriyorum. (tüm bileşenler UI'ye gitti)Ember Bileşen temizleme kodu

Bellek sızıntılarını önlemek için temizlemem gereken her şey neye yarar?

az örnekler: i bileşenin didInsertElement içinde Ember.addObserver kullanıldığında

i willDestroyElement yöntemde Ember.removeObserver kullanarak kaldırmak gerekir.

Takılı olan tüm olay işleyicileri ayrılmalıdır.

Temizlemem gereken her şeyin neler olduğunu görmek için daha fazla örnek/bağlantı bulabilir miyim?

cevap

3

İdeal kodunuzu yazmak, böylece temizlik gerekmez. Eğer

observeWhatever: Ember.observer('whatever', function() {... 

olarak bir gözlemci tanımlamak Örneğin

hiçbir özel söküm gereklidir.

click: function(event) { ... 

o zaman Mobilite gerekli olan ile aynı şekilde, bir olay işleyicisi ise. Ancak, bileşeninizdeki bazı öğelerdeki bir DOM etkinliğini dinlemek isterseniz ne olur? Biz genellikle Ember veya jQuery programladığınızı olmadığını hatırlayamıyorum insanlar gibi şeyler bakın:

setupWhatever: function() { 
    Ember.$('.foo.bar.baz').on('click', function() { alert('baz clicked!'); }); 
}.on('init') 

Bu hemen hemen bir anti-desen, ve sadece o yırtık gerekir çünkü. Uygulamanın bölümlerine nasıl başvurulacağı ve geri aramaların nasıl ayarlanacağı ve eylemlerin nasıl ele alınacağı tamamen zahmetlidir. .foo.bar.baz olarak adlandırdığınız şey, kendi dinleyicisini bileşen düzeyinde ayarlayan kendi bileşeni olmalıdır.

{{foo-bar-baz action=(action 'bazClicked')}} 

actions: { 
    bazClicked() { alert('baz clicked'); } 
    ... 
} 

Bir kanca kurmak istiyorsanız, bu tür sizin için de yıkılıp edilecektir

listen: Ember.on('message', function() ... 

olarak: O şöyle ele alınması neden olan bir işlem, gönderirdi.

Ben bileşenin didInsertElement yılında Ember.addObserver kullanılan, ben willDestroyElement yönteminde Ember.removeObserver kullanarak kaldırmalısınız.

didInsertElement'da nasıl bir gözlemci kurarsınız? didInsertElement'un aşırı kullanımı da bir anti-desentir. Ember'i doğru kullanırsanız, hemen hemen hiç gerekli olmamalıdır. Olası bir istisna, jQuery eklentisini, bunlardan birini kullanacak kadar talihsiz durumdaysa başlatıyor.

Zamanlayıcılarla ne tür bir nedenden dolayı çalışıyorsanız, bunları çıkışta iptal etmeniz gerekebilir.