如何添加Backbone Model全局函数

时间:2015-04-25 22:44:45

标签: javascript backbone.js reset backbone-model

我需要为我的所有模型添加一个函数,但我不知道如何将模型识别为“this”范围变量。我的函数可以将我的模型重置为默认值,并通过一些数据对象作为参数:

Backbone.Model.prototype.reset = function( data ){

        this.set(this.defaults);

        $.each( data, function( key, value ){

              this.set( key, value );
        });
}

2 个答案:

答案 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));