javascript - Access `this` from callback - Stack Overflow

Similar question was already asked here How do I trigger the success callback on a model.save()?, but s

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
Add a ment  | 

2 Answers 2

Reset to default 9

That 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

相关推荐

  • javascript - Access `this` from callback - Stack Overflow

    Similar question was already asked here How do I trigger the success callback on a model.save()?, but s

    7天前
    30

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信