2013-05-24 10 views
7

In questo evento di modifica globale, c'è un modo per rilevare quale attributo è stato modificato?Ottenere l'attributo modificato sull'evento di cambiamento

myModel.on('change', function(model) { 
    // Which attribute changed? 
}); 

ho provato la seguente:

  • Utilizzando myModel.previousAttributes() ma sempre tornato ultimi valori ... Credo che solo gli aggiornamenti dopo un'interazione con il server.
  • Iterare gli attributi di valle e utilizzare myModel.hasChanged(attr) ma restituito sempre falso.

C'è un modo per realizzare questo?

risposta

12

È possibile utilizzare model.changedAttributes

changedAttributes model.changedAttributes ([attributi])
recuperare un hash di attributi solo del modello che hanno cambiato, o false se non ce ne sono.
Facoltativamente, è possibile passare un hash di attributi esterni in, restituendo gli attributi in quell'hash che differiscono dal modello. Questo può essere utilizzato per capire quali parti di una vista dovrebbero essere aggiornati, o quello che chiama necessità di essere fatto per sincronizzare le modifiche al server di

Per esempio,

var m = new Backbone.Model({ 
    att1: 'a', 
    att2: 'b', 
    att3: 'c' 
}); 

m.on('change', function() { 
    console.log(m.changedAttributes()); 
    console.log(_.keys(m.changedAttributes())); 
}); 

m.set({ 
    att1: 'd', 
    att3: 'e' 
}); 

E una demo http://jsfiddle.net/nikoshr/NYnqM/

+0

Grande, proprio quello di cui avevo bisogno grazie – jviotti

+1

Potrei essere in ritardo alla festa. Se stai usando Backbone 0.9.9 e successivi inizia a usare .listen To al posto di .on in modo da non finire con oggetti che sono immuni alla garbage collection. – Ananda

+0

Yo ... fantastico ... grazie !!! –