2012-05-24 21 views
10

remove() yönteminde undelegateEvents() yöntemini aramak kötü bir uygulamadır! Neden omurga yöneticisi tarafından varsayılan olarak dahil edilmedi?Görünümün ardından artık olayları geri almanın en iyi yolu artık gerekli değil

Sadece bir görünüm değişkenini yeniden başlatırken, çok fazla bağlayıcı konuya düştüğümü anladım. Yeni bir görünüm oluşturulduğunda, undelegateEvents() otomatik olarak çağrılsa da, önceki örnek için değil, yeni örnek görünüm için olayları geri almaya çalışıyor. Bu nedenle, her seferinde manuel olarak aramadıkça, hayalet olay geri bildirimleri canlı kalır ve uygulamalarımı mahveder.

Bunu işlemenin en iyi yolu nedir?

+0

ilgili? http://stackoverflow.com/questions/10429648/backbone-js-how-to-unbind-from-events-on-model-remove/10433015#10433015 – fguillen

+0

Görünümler arasında geçiş yaparken bir 'el'i yeniden kullanıyor musunuz? yenilerini mi yaratıyorsun? JQuery 'delege' görünümün' el'ine bağlı. –

+0

@muistooshort Evet, çoğu kez her zaman yeni bir tane oluşturmak ve eklemek yerine, aynı DOM kapsayıcısını yeniden kullanırım. Bu nedenle, hayalet geri bildirimlerinin kaldırılması kritik önemdedir – preslavrachev

cevap

5

remove() yöntemini görüntülemek için undelegateEvents() numaralı telefonu aramak kötü bir uygulamadır. Eğer remove() Kendi uyguladığınız durumlar dışında

Gerekli değil ve Backbone.View.remove() veya this.$el.remove() demiyorlar. En azından jQuery kullanıyorsanız. Bir Omurga görünümünde remove() numaralı telefonu arayarak jQuery.remove() numaralı telefonu arayarak, DOM etkinlik dinleyicilerinin tümünü kaldıracaktır.

Sadece bir görünüm değişkenini yeniden başlatırken, çok fazla bağlayıcı sorunla karşılaştığımı anladım.

var View = Backbone.View.extend({ 

    initialize : function (options) { 

    // `on()` or `bind()` 

    this.model.on('something', this.render, this); 

    } 

}); 

Delegating events to a parent view in Backbone

benim cevap bakınız: onlar sonra temizlemek gerekmez büyü çeşit, örneğin gibi

Birçok insan Backbone.Events kullanmak gibi görünüyor

Yaşadığınız hayalet olay sorunlarının DOM olayları değil Backbone olayları ile mümkün mü?

Model nesnesini etrafında tutarsanız ancak bu görüntüleme nesnesinden veya Omurga olayı kayıtlarından kurtulmak istiyorsanız, view.model.off(null, null, this);'u yapmanız gerekir. Herhangi bir harici nesneye kaydettiğiniz etkinlikleri açmanız gerekir. İsterseniz, Backbone.View.remove()'u geçersiz kılabilir ve orada yapabilirsiniz, ancak varsayılan olarak bu yöntem view.$el.remove() için kısa yoldur.

İlgili konular