我需要将一个事件附加到主视图元素,这个。$ el。在这种情况下,它是一个'LI'。然后我有时需要重新渲染这个视图。问题是,如果我重新渲染它,它会附加onRender方法中的任何事件,每次渲染时都附加到此。$ el。因此,如果我调用this.render()3次,处理程序将连接3次。但是,如果我将事件附加到此。$ el的childNode,则不会发生这种情况,并且事件似乎会自动取消保护并在每次渲染时添加回来。问题是我需要在这种情况下使用主要的。$ el元素。
这是一个错误吗?不应该这个。$ el函数就像childNodes一样?我不应该附上这些东西。$ el?
在视图中:
onRender: function(){
this.$el.on('click', function(){
// do something
});
答案 0 :(得分:0)
如果您能够use the view's event hash,则可以执行以下操作:
var Bookmark = Backbone.View.extend({
events: {
'click': function() {
console.log('bound once')
}
}
...});
如果由于某种原因这不是一个选项,你可以explicitly remove any existing event listeners for this event in the render method,这将阻止监听器被多次连接:
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;
}
});