Ged*_*nas 4 javascript scope callback backbone.js
这里已经提出了类似的问题如何在model.save()上触发成功回调?,但仍然没有回答如何从回调中触发事件.
所以这里是success我的代码中的回调,我想在其中调用addOne事件来呈现保存的注释.一切都很好,除了this.addOne(receivedItem);- 我不能this在回调中使用来触发这个事件.其他地方 - 我可以.
如何解决这个问题呢?
CommentsListView = Backbone.View.extend({
...
addOne: function (item) {
var commentView = new CommentView({
model: item
});
this.$el.append(commentView.render().el);
},
addNewComment: function (event) {
var item = {
post_id: this.$('#post_id').val(),
text: this.$('#text').val()
};
var commentItem = new CommentItem();
commentItem.save({'model':item}, {
success: function(receivedItem, response) {
this.addOne(receivedItem); // Uncaught TypeError: Object [object Window] has no method 'addOne'.
}
}, this);
}
});
Run Code Online (Sandbox Code Playgroud)
这是因为成功回调具有不同的范围,并且this不指向您的视图.
要快速解决这个问题,只需参考this并使用它:
var self = this;
commentItem.save({'model':item}, {
success: function(receivedItem, response) {
self.addOne(receivedItem); // works
}
});
Run Code Online (Sandbox Code Playgroud)
或者你可以使用下划线的bind方法将不同的上下文绑定到一个函数:
success : _.bind(function(receivedItem, response) {
this.addOne(receivedItem);
}, this)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2044 次 |
| 最近记录: |