2012-02-21 3 views
14

Ben window.myView değişkende görünümü saklamak, bunu işlemek, sonra javascript konsolda çağrı

$('#container').html(window.myView.$el) 

Bound olaylar çalışmayı durdurur.

ben o kadar olması gerekiyordu eminim ama:

  • neden tam bu şekilde çalışır?
  • Olay bağlantılarını kaybetmemekle birlikte görünümün alt kısımlarını nasıl yeniden oluşturabilirim?
  • myView.render() numaralı telefon numarası neden arama bağlantılarını kaybetmez?

Güncelleme:

this makaleye Bulundu. Sebebi bu mu?

emin olun jQuery size anında görünümler oluşturmak ve eklemek/dom bunları kaldırmak nereye bir uygulama oluşturup ediyorsanız

bunu istemiyorsanız etkinliklerinizi boşaltma değil, sen bir sorun olabilir. Her zaman bir görünümü dom'dan kaldırırsanız, jQuery tüm olayları kaldırır. Dolayısıyla, bir görünüm için referansınız olamaz ve bunu dom'tan kaldırabilir ve daha sonra yeniden ekleyebilirsiniz. Tüm etkinlikleriniz boşaltılacaktı. Görüntülemeyi korumak istiyorsanız, bunları kullanarak ekranı gizlemek daha iyi bir fikirdir: yok. Bununla birlikte, bunu kötüye kullanmamalı ve bir süre kullanmayacağınız görünümleri geri dönüştürmemelisiniz (ve bellek sızıntılarını önleyiniz).

+0

Bu soru için teşekkürler. Omurga ile benzer bir sorun yaşadım ve neler olduğunu anlayamadım. –

cevap

18

jQuery empty, html ve remove olaylar bellek sızıntılarını önlemek için tüm jQuery olay ve veri bağlamalarını temizliyor (eğer daha anlamaya cleanData yöntemi için jQuery kaynak kodunu kontrol edebilirsiniz - bu belgesiz yöntemdir)

view.render(), omurga görünüm olayları olay temsilci kullanarak bağlı olduğundan ve görünümün öğelerine doğrudan görünümün el bağladığından, olayları kaldırmaz.

Görünümlerinizi yeniden kullanmak isterseniz, bu şekilde bellek sızıntıları üretmemeye dikkat etmenize rağmen, tüm olayları ve verileri bağlı tutan jQuery detach yöntemini kullanarak kaldırabilirsiniz. sen hep Backbone.View delegateEvents yöntemi kullanarak kolayca Omurga olayları rebind birinci yolu gitmek istiyorsanız (jquery detach docs)

. (backbone doc)

ps. jQuery .empty() yerine jQuery html yöntemi olarak kullanmak için daha temiz ve daha kullanışlıdır, her zaman yeni html eklemeden önce tüm olayları ve verileri temizlemek için önce boş çağrıları arar. Ayrıca jQuery olayları/verileri temizlememesinin sebeplerinden dolayı bellek sızıntıları üretebileceğinden jquery ve native DOM innerHTML'yi asla karıştırmayın.

+1

bunu çağırıyor.delegateEvents() 'görünümünde bir çekicilik gibi çalıştı. Teşekkürler. –

+0

.delegateEvents için Hooray! – SimplGy

+0

Ayrıca, ana görünümü oluştururken tüm alt görünümleri yırtıp yeniden oluşturmayı da düşünün. –