2011-12-28 15 views
6

Come posso sapere quale attributo del modello di vista è stato modificato nella funzione di rendering? (Nella funzione di rendering, "e" è il modello, ma ho bisogno solo dell'attributo che è cambiato.) Ho bisogno di sapere questo per sapere quale modello usare. O c'è un altro metodo per farlo?backbone.js Visualizza determinare quale attributo del modello è cambiato

window.Person = Backbone.Model.extend({}); 

window.Njerzit = Backbone.Collection.extend({ 
    model: Person, 
    url: '/Home/Njerzit' 
}); 

window.PersonView = Backbone.View.extend({ 
    tagName: 'span', 

    initialize: function() { 
     _.bindAll(this, 'render'); 
     this.model.bind('change', this.render); 
    }, 

    render: function (e) { 
     //if model name is changed, I need to render another template 
     this.template = _.template($('#PersonTemplate').html()); 
     var renderContent = this.template(this.model.toJSON()); 
     $(this.el).html(renderContent); 
     return this; 
    } 
}); 
+0

entrambe le risposte qui sotto offrire soluzioni, ma il più semplice sta usando un evento più specifico come la modifica: attrName nel tuo caso cambia: Nome ... – Sander

risposta

14

credo che la funzione changedAttributes è quello che stai cercando per

changedAttributesmodel.changedAttributes ([attributi])
recuperare un hash di attributi solo del modello che hanno cambiato . Facoltativamente, può essere passato un hash degli attributi esterni, restituendo gli attributi in tale hash che differiscono dal modello. Questo può essere utilizzato per calcolare in cui devono essere aggiornate le parti di una vista o quali chiamate devono essere effettuate su per sincronizzare le modifiche al server.

o per controllare se un attributo specifico è cambiato utilizzare la funzione hasChanged

hasChangedmodel.hasChanged ([attributo])
ha il modello modificati dopo l'ultimo evento "cambiamento"? Se viene passato un attributo, restituisce true se quell'attributo specifico è cambiato.

var nameChanged = this.model.hasChanged("name"); 
Problemi correlati