0
我有一個相對簡單的Backbone處理消息容器。我可以添加消息,並且它們顯示正常,但自動添加延遲以關閉消息不起作用,因爲undefined
傳遞給回調。_.delay從一個Backbone.View事件處理程序調用
有人能告訴我如何正確指定參數被調用?主線是_.delay(function(){ messages.remove(this.model) }, 3000);
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'}))
當然this.model
是渲染方法中定義的,但它在remove
通話不確定的。
你也可以使用['_.bind'](http://documentcloud.github.com/underscore/#bind),但這對於一個這樣的簡單例子來說可能是過度的。 –