Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events 主干:将事件附加到此。$el和重新呈现会导致绑定多个事件_Events_Backbone.js - Fatal编程技术网

Events 主干:将事件附加到此。$el和重新呈现会导致绑定多个事件

Events 主干:将事件附加到此。$el和重新呈现会导致绑定多个事件,events,backbone.js,Events,Backbone.js,我需要将一个事件附加到主视图元素,这是。$el。在这种情况下,它是一个'李'。然后我有时需要重新渲染这个视图。问题是,如果我重新渲染它,每次渲染它时,它都会在onRender方法中附加任何附加到它的事件。$el。因此,如果我调用此.render()3次,处理程序将附加3次。但是,如果我将事件附加到该.el的子节点,则不会发生这种情况,并且事件似乎会自动取消委派并添加回每个渲染。问题是在这种情况下我需要使用主this.$el元素 这是虫子吗?这个.$el不应该像childNodes一样工作吗?我不

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

这是虫子吗?这个.$el不应该像childNodes一样工作吗?我不应该把东西附在这上面吗

在视图内部:

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

你不能将eventhandler委托给body或更高的元素,这样你就不需要每次添加/删除元素时都注册一个吗?我添加了一个小预览,希望能显示我在做什么,为什么你不使用视图的事件哈希来附加此侦听器?我不知道为什么不使用事件哈希。我没有意识到它的作用。我对BB有点陌生。非常感谢。