这是我在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
?
答案 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);
}