2013-02-15 11 views
7

Jak zapobiec rozprzestrzenianiu się zdarzeń modelu szkieletowego w kolekcjach szkieletów?Jak zapobiegać modelowi szkieletowemu do propagacji zdarzeń kolekcji?

Edit:

Powiedzmy Mam coś jak poniżej, gdzie CollectionView zawiera zbiór MyModels ...

var CollectionView = Backbone.Collection.Extend({ 
    initialize: function() { 
     this.collection.on("change", doStuff); 
    } 
}); 

var ModelView = Backbone.View.Extend({ 
    initialize: function() { 
     this.model = new MyModel(); 
     this.model.on("change", doStuff); 
     this.model.fetch(); 
    } 
}); 

Jeżeli w szczególnym przypadku nie chciałem „Zmień” wydarzenie do propagacji do kolekcji po zakończeniu pobierania, zastanawiam się, czy jest jakiś sposób, aby to zatrzymać.

Dzięki

+1

Modele nie uruchamiają zdarzenia resetowania, czy mógłbyś rozwinąć swoje pytanie? W szczególności, jaki kod uruchamiasz, uruchamiając wydarzenie, którego nie chcesz propagować? – Tomdarkness

+0

Punkt To @ Tomdarkness, kod, który pokazałeś, jest wiązaniem zdarzenia. Co właściwie wywołuje zdarzenie? (Myślę, że jest to dobre pytanie, ponieważ odpowiedź nie jest widoczna w dokumentach AFAIK.) – Mathletics

+0

Nie wiedziałem, że modele nie uruchomiły zdarzenia resetowania - dobrze wiedzieć. – user1031947

Odpowiedz

8

Aby zapobiec model wypalania zdarzenie change:

model.set(attrs, {silent: true}); 

To nie może być to, co chcesz, chociaż, ponieważ będzie to również zapobiec zdarzenie zmienić model jest od strzelania.

Kolekcje przechodzą przez wszystkich zdarzeń modelu, ale co można zrobić, to przekazać dodatkowe opcje, które będą również przejdzie przez:

model.set(attrs, {dontBubble: true}); 

iw swoim CollectionView:

var CollectionView = Backbone.View.extend({ 
    this.initialize = function() { 
    this.collection.on('change', doStuff, this); 
    }, 
    this.doStuff = function(model, collection, options) { 
    if (options.dontBubble) { 
     return; 
    } 
    // Do some stuff. 
    } 
}); 

To prawda, że ​​jest to trochę brzydki, ale jest to jeden sposób, aby to osiągnąć.

Powiązane problemy