2013-07-29 59 views
6

我想重寫骨幹網方法,以便每當我爲骨幹模型設置一個值時,在該屬性上註冊的回調被調用而不檢查該屬性的相同的先前值。覆蓋骨幹'設置'方法

var model = Backbone.Model.extend({ 
    defaults : { 
     prop1 : true 
    } 
}); 

var view = Backbone.View.extend({ 
    initialize : function(){ 
     this.listenTo(this.model,"change:prop1", this.callback); 

    }, 
    callback : function(){ 
     // set is called on prop1 
    } 
}); 

var m1 = new model(); 
var v1 = new view({model:m1}); 
m1.set("prop1",true); // It doesn't trigger callback because I'm setting the same value to prop1 

回答

19

你可以寫在骨幹模型的新方法,設置是這樣的:

var model = Backbone.Model.extend({ 
    defaults: { 
     prop1: true; 
    }, 

    // Overriding set 
    set: function(attributes, options) { 
     // Will be triggered whenever set is called 
     if (attributes.hasOwnProperty(prop1)) { 
      this.trigger('change:prop1'); 
     } 

     return Backbone.Model.prototype.set.call(this, attributes, options); 
    } 
});