1

我希望这段代码足以理解问题。
问题如下,

1)我第一次加载 myView,
2)如果我点击div#myId,该功能myAction会按预期触发一次。3) 如果为另一个视图
调用该方法,该函数会被触发两次。 4)然后,如果我重复步骤 3),该功能被触发 3 次,依此类推。removerenderingmyAction
myAction

可能是什么问题呢?

var myView = Backbone.View.extend({

    // The DOM events specific to an item.
    events: {
        "click #myId" : "myAction"
    },

    myAction: function () {
        // some code
    },

    remove: function remove () 
    {
        $(this.el).html("");
    }

});

PS:
为每个渲染调用创建的 DOM 是可以的。

4

1 回答 1

1

通常这里的问题是您处于某种状态,您一遍又一遍地重新渲染预定义元素的视图,而没有正确破坏视图,从而导致“僵尸”视图。如果您el在视图中定义了一个,并继续在其上渲染所述视图,您最终将复制您的事件。

以 jQuery 为例,如果你这样做几次:

$(document).bind('click',function(){ console.log("document.click"); });
$(document).bind('click',function(){ console.log("document.click"); });
$(document).bind('click',function(){ console.log("document.click"); });

它将触发该事件三次。

好好看看你如何初始化你的视图,最重要的是你如何渲染/重新渲染它们。

您在删除方法中必须做的更多是这些方面的事情

remove: function remove () 
{
    this.$el.remove();
    this.$el.unbind();
}
于 2012-05-15T21:27:46.380 回答