这个对象的骨干问题

时间:2011-09-28 16:45:11

标签: javascript backbone.js

这是我在Backbone框架中的视图:

jQuery(document)ready(function() { 

com.company.View = Backbone.View.extend({
  initialize : function() {
     myCollection.bind('add', this.onSuccess);
  },

  onSuccess : function(model) {
    // do something
    this.somethingElse();
  },

  somethingElse : function() {
    // do something else
  }
});

});

现在问题出在onSuccess函数内部,此对象不再属于View,它属于model。所以,当我致电this.somethingElse()时,我得到undefined

如何在this.somethingElse内成功致电onSuccess

2 个答案:

答案 0 :(得分:2)

问题是你依靠this指向原始对象。与Javascript中的许多语言this不同,它基于调用方法的方式而更改。通常在回调中,调用this指向不同的对象或根本不调用(undefined)。

解决此问题的一种方法是取消对this的依赖,转而使用不能被干扰的函数局部变量。例如

com.company.View = Backbone.View.extend(
   return function() {
      var self = {}
      self.initialize = function() {
        myCollection.bind('add', self.onSuccess);
      };
      self.onSuccess = function(model) {
        // do something
        self.somethingElse();
      };
      self.somethingElse = function() {
        // do something else
      };
      return self;
    }();
});

答案 1 :(得分:2)

您希望将函数绑定到View对象的上下文。

initialize中,执行以下操作:

initialize : function() {
    _.bindAll(this, "onSuccess");
    myCollection.bind('add', this.onSuccess);
}