我需要为我的所有模型添加一个函数,但我不知道如何将模型识别为“this”范围变量。我的函数可以将我的模型重置为默认值,并通过一些数据对象作为参数:
Backbone.Model.prototype.reset = function( data ){
this.set(this.defaults);
$.each( data, function( key, value ){
this.set( key, value );
});
}
答案 0 :(得分:4)
您的代码似乎合法。 this
的值是在运行时定义的,取决于您调用方法的方式。如果您使用modelInstance.reset()
,this
的值将为modelInstance
。
但是,改变第三方的原型被认为是一种应该避免的不良做法。更好的做法是创建一个抽象模型,并让所有模型实现它。
它看起来像:
var AbstracrtModel = Backbone.Model.extend({
reset: function (data, options) {
this.clear(options);
this.set(_.defaults({}, data || {}, this.defaults || {}), options);
}
});
model.set
的api允许传递数据哈希,因此您不需要内部循环。
答案 1 :(得分:2)
你的"这个" $ .each中的上下文是迭代器。你可以得到一个
var self = this;
$.each( data, function( key, value ){
self.set( key, value );
});
在每个函数中使用self,或者将上下文绑定到函数。
$.each( data, function( key, value ){
this.set( key, value );
}.bind(this));