2013-02-15 6 views
7

Come impedire agli eventi del modello Backbone di propagarsi alle raccolte backbone?Come impedire la propagazione dell'evento di raccolta del modello di dorsale?

Edit:

Diciamo che ho qualcosa come il seguente, dove CollectionView contiene una raccolta di 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(); 
    } 
}); 

Se in un caso particolare non volevo l'evento "cambiamento" per propagare fino alla raccolta dopo il recupero completa, mi chiedo se c'è un modo per fermarlo.

Grazie

+1

I modelli non attivano l'evento di reset, potresti espandere la domanda? In particolare quale codice stai eseguendo che sta sparando l'evento che non vuoi propagare? – Tomdarkness

+0

Per il punto @ Tomdarkness, il codice che hai mostrato è il binding di eventi. Cosa sta effettivamente innescando l'evento? (Penso che questa sia una buona domanda, perché la risposta non è evidente nei documenti AFAIK.) – Mathletics

+0

Non ero a conoscenza del fatto che i modelli non attivassero l'evento di reset - buono a sapersi. – user1031947

risposta

8

Per evitare un modello di sparare un evento di modifica:

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

questo potrebbe non essere quello che vuoi, però, perché questo impedirà anche evento di modifica del modello di sparare.

Collezioni passano attraverso tutti gli eventi modello, ma cosa si può fare è passare le opzioni extra che riceverà anche passati attraverso:

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

e nel tuo 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. 
    } 
}); 

Certo, si tratta di un un po 'brutto, ma è un modo per farlo.

Problemi correlati