如果我的视图具有在initialize函数中获取的集合,但是在fetch返回之前需要清除视图,那么如何取消绑定成功和/或错误回调?
所以,使用这样的代码:
Backbone.View.extend({
initialize: function () {
this.collection = new MyColl();
this.collection.fetch({
success: this.successCallback,
error: this.errorCallback
});
},
close: function () {
// what goes here to keep successCallback and errorCallback from being called?
}
});
当我调用myView.close()来清理它时(在这种情况下显示另一个视图),我不想稍后调用successCallback(在查看“清理”之后)。
我试过了:
close: function () {
this.collection.unbind('reset');
}
但是这个集合似乎没有在fetch之后的_callbacks内部变量中列出这个事件,所以unbind似乎没有帮助。
答案 0 :(得分:1)
你总是可以向this.successCallback和this.errorCallback添加一个逻辑标志来检查是否已经调用this.close:
Backbone.View.extend({
initialize: function () {
this.collection = new MyColl();
this.collection.fetch({
success: this.successCallback,
error: this.errorCallback
});
},
close: function () {
// do stuff
this.closed = true;
},
successCallback: function() {
if(this.closed) return;
//Do stuff
}
});
或者,您不应该以这种方式设置活动。如果你改为做类似的事情,那就更像是“骨干”了。
Backbone.View.extend({
initialize: function () {
this.collection = new MyColl();
this.collection.bind('reset', this.SuccessCallback);
this.collection.bind('error', this.errorCallback);
},
close: function () {
// do stuff
this.collection.unbind('reset', this.successCallback);
this.collection.unbind('error', this.errorCallback);
},
successCallback: function() {
//Do stuff
}
});