Backbone:将事件附加到此。$ el和重新渲染会导致绑定多个事件

时间:2015-05-05 04:13:08

标签: events backbone.js

我需要将一个事件附加到主视图元素,这个。$ el。在这种情况下,它是一个'LI'。然后我有时需要重新渲染这个视图。问题是,如果我重新渲染它,它会附加onRender方法中的任何事件,每次渲染时都附加到此。$ el。因此,如果我调用this.render()3次,处理程序将连接3次。但是,如果我将事件附加到此。$ el的childNode,则不会发生这种情况,并且事件似乎会自动取消保护并在每次渲染时添加回来。问题是我需要在这种情况下使用主要的。$ el元素。

这是一个错误吗?不应该这个。$ el函数就像childNodes一样?我不应该附上这些东西。$ el?

在视图中:

onRender: function(){
    this.$el.on('click', function(){
    // do something
});

1 个答案:

答案 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;
    }
});