2011-12-28 16 views
6

¿Cómo puedo saber qué atributo del modelo de vista se cambia en la función de hacer? (En la función de renderizado, "e" es el modelo, pero solo necesito el atributo que se cambia). Necesito saber esto para saber qué plantilla usar. ¿O hay otro método para hacer esto?Backbone.js Ver determinar qué atributo del modelo es el cambio

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

ambas respuestas a continuación ofrecen soluciones, pero la más fácil está usando un evento más específico como el cambio: attrName en su caso cambia: Nombre ... – Sander

Respuesta

14

creo que la función changedAttributes es lo que estás buscando

changedAttributesmodel.changedAttributes ([atributos])
Recuperar un hash de atributos de sólo el modelo que han cambiado . Opcionalmente, se puede pasar un hash de atributos externos, devolviendo los atributos en ese hash que difieren del modelo. Esto se puede utilizar para averiguar qué porciones de una vista deben ser actualizados, o lo que se llama necesidad de ser hecho para sincronizar los cambios en el servidor.

o para comprobar si un atributo específico ha cambiado utilizar la función hasChanged

hasChangedmodel.hasChanged ([atributo])
¿Ha cambiado el modelo desde el último evento de "cambio"? Si se pasa un atributo, devuelve verdadero si ese atributo específico ha cambiado.

var nameChanged = this.model.hasChanged("name"); 
Cuestiones relacionadas