可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I want to override backbone set method so that whenever I set a value to backbone Model the callbacks registered on that attribute get called without checking for same previous value of that attribute .
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
回答1:
You can write a new method in backbone model set like this :
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); } });
回答2:
Actually, the signature of function set
differs from the one depicted in the accepted answer.
export var MyModel = Backbone.Model.extend({ set: function (key, val, options) { // custom code var result = Backbone.Model.prototype.set.call(this, key, val, options); // custom code return result; } });
See: