我需要将事件附加到主视图元素,this。$ el。在这种情况下,它是" li"。然后,我有时需要重新呈现此观点。问题是,如果我对其进行渲染,它将附加附加的任何事件。$ el每次渲染时。因此,如果我称this.render()3次处理程序连接3次。但是,如果我将事件附加到此的子词。$ el,这不会发生,并且事件似乎自动未悬而未决,并在每个渲染上添加。问题是我需要使用主要的。在这种情况下,$ el element。
这是一个错误吗?不应该这样。我不应该把东西附加到这个。$ el?
视图内:
onRender: function(){
this.$el.on('click', function(){
// do something
});
如果您可以使用视图事件哈希,则可以执行以下操作:
var Bookmark = Backbone.View.extend({
events: {
'click': function() {
console.log('bound once')
}
}
...});
如果由于某种原因不是选项,您可以在渲染方法中明确删除此事件的任何现有事件听众,这将阻止听众多次附加:
var Bookmark = Backbone.View.extend({
...
render: function(x) {
this.$el.off('click.render-click');
this.$el.html(this.template());
this.$el.on('click.render-click', function () {
console.log('only ever bound once');
});
return this;
}
});