Similar question was already asked here How do I trigger the success callback on a model.save()?, but still no answer how to trigger events from callbacks.
So here is success
callback in my code, in which I want to call addOne
event to render saved Comment. Everything works well except this.addOne(receivedItem);
- I can't use this
in callback to trigger this event. Everywhere else - I can.
How to solve this problem?
CommentsListView = Backbone.View.extend({
...
addOne: function (item) {
var mentView = new CommentView({
model: item
});
this.$el.append(mentView.render().el);
},
addNewComment: function (event) {
var item = {
post_id: this.$('#post_id').val(),
text: this.$('#text').val()
};
var mentItem = new CommentItem();
mentItem.save({'model':item}, {
success: function(receivedItem, response) {
this.addOne(receivedItem); // Uncaught TypeError: Object [object Window] has no method 'addOne'.
}
}, this);
}
});
Similar question was already asked here How do I trigger the success callback on a model.save()?, but still no answer how to trigger events from callbacks.
So here is success
callback in my code, in which I want to call addOne
event to render saved Comment. Everything works well except this.addOne(receivedItem);
- I can't use this
in callback to trigger this event. Everywhere else - I can.
How to solve this problem?
CommentsListView = Backbone.View.extend({
...
addOne: function (item) {
var mentView = new CommentView({
model: item
});
this.$el.append(mentView.render().el);
},
addNewComment: function (event) {
var item = {
post_id: this.$('#post_id').val(),
text: this.$('#text').val()
};
var mentItem = new CommentItem();
mentItem.save({'model':item}, {
success: function(receivedItem, response) {
this.addOne(receivedItem); // Uncaught TypeError: Object [object Window] has no method 'addOne'.
}
}, this);
}
});
Share
Improve this question
edited Sep 21, 2017 at 20:26
Louis
152k28 gold badges286 silver badges329 bronze badges
asked Dec 29, 2012 at 11:40
Gediminas ŠukysGediminas Šukys
7,4018 gold badges48 silver badges62 bronze badges
1
- 2 Possible duplicate of How to access the correct `this` / context inside a callback? – Bergi Commented Nov 8, 2016 at 17:09
2 Answers
Reset to default 9That happens because the success callback has a different scope, and this
does not point to your view.
To quickly solve this, just make a reference to this
and use it instead:
var self = this;
mentItem.save({'model':item}, {
success: function(receivedItem, response) {
self.addOne(receivedItem); // works
}
});
or you can use underscore's bind
method to bind a different context to a function :
success : _.bind(function(receivedItem, response) {
this.addOne(receivedItem);
}, this)
This could be a late answer. but would help somebody who is looking for it. This is accessing 'this' keyword from a settimeout callback
CommentsListView = Backbone.View.extend({
...
addOne: function (item) {
// DO Stuff
},
addNewComment: _.bind(function (event) {
setTimeout(_.bind(function(){
this.addOne(/*receivedItem*/);
}, this), 1000);
}, this)
});
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744348456a4569829.html
评论列表(0条)