Backbone.js _.延迟主干内的调用。查看事件处理程序

Backbone.js _.延迟主干内的调用。查看事件处理程序,backbone.js,underscore.js,Backbone.js,Underscore.js,我有一个相对简单的主干处理的消息容器。我可以添加消息,它们显示得很好,但是添加延迟以自动关闭它们不起作用,因为未定义的会传递到回调 有人能告诉我如何正确指定要调用的参数吗?主线是\uu.delay(function(){messages.remove(this.model)},3000) 当然,this.model是在render方法中定义的,但是它在remove调用中没有定义。这是因为this绑定到调用延迟回调函数的任何对象,而不是视图。在调用之前,延迟分配var self=this然后在回调

我有一个相对简单的主干处理的消息容器。我可以添加消息,它们显示得很好,但是添加延迟以自动关闭它们不起作用,因为
未定义的
会传递到回调

有人能告诉我如何正确指定要调用的参数吗?主线是
\uu.delay(function(){messages.remove(this.model)},3000)


当然,
this.model
是在render方法中定义的,但是它在
remove
调用中没有定义。

这是因为
this
绑定到调用延迟回调函数的任何对象,而不是视图。在调用
之前,延迟
分配
var self=this
然后在回调函数中使用
self.model

这是因为
绑定到调用延迟回调函数的任何对象,而不是视图。在调用
之前,延迟
分配
var self=this
然后在回调函数中使用
self.model

您也可以使用,但对于这样一个简单的情况来说,这是过分的。您也可以使用,但对于这样一个简单的情况来说,这是过分的。
var Message = Backbone.Model.extend({
    defaults: {
        message: 'No message',
        type: 'error'
    },

    /*validate: function( attrs ) {
        if ( !attrs.type in ['error', 'warning', 'success', 'info'] ) {
            return 'Wrong message type given';
        }
    }*/
});
var Messages = Backbone.Collection.extend({
    model: Message
}) 
var messages = new Messages;

var MessageView = Backbone.View.extend({
    template: Handlebars.compile( $('#t-message').html() ),

    initialize: function() {
        messages.bind('delete', this.remove, this);
    },

    render: function( event ) {
        $(this.el).html( this.template( this.model.toJSON() ) );
        // TODO: this never fires properly
        _.delay(function(){ messages.remove(this.model) }, 3000);
        return this;
    }

});

var MessageContainerView = Backbone.View.extend({
    id: 'messages',
    initialize: function() {
        messages.bind('add', this.addMessage, this);
    },
    render: function( event ) {
        return this;
    },
    addMessage: function( message ) {
        var view = new MessageView({model: message});
        $('#' + this.id).append(view.render().el);
    }
});

var messagecontainerview = new MessageContainerView;
messages.add(new Message({message: 'Close this in 3 secs.', type: 'success'}))