gpt4 book ai didi

javascript - 从回调中访问 `this`

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:35:34 28 4
gpt4 key购买 nike

这里已经问过类似的问题How do I trigger the success callback on a model.save()? ,但仍然没有回答如何从回调中触发事件。

所以这是我代码中的 success 回调,我想在其中调用 addOne 事件来呈现已保存的 Comment。一切正常,除了 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);
}
});

最佳答案

发生这种情况是因为成功回调具有不同的范围,并且 this 没有指向您的 View 。
要快速解决这个问题,只需引用 this 并改用它:

var self = this;
commentItem.save({'model':item}, {
success: function(receivedItem, response) {
self.addOne(receivedItem); // works
}
});

或者你可以使用下划线的 bind将不同上下文绑定(bind)到函数的方法:

success : _.bind(function(receivedItem, response) {
this.addOne(receivedItem);
}, this)

关于javascript - 从回调中访问 `this`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14081287/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com