Backbone:如何将myView渲染到DOM中

时间:2012-05-15 20:57:47

标签: javascript backbone.js backbone-events

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

1)我第一次加载myView,
2)如果我点击div#myId,功能myAction将按预期触发一次。
3)如果为remove另一个视图调用方法rendering,则会触发功能myAction两次。
4)然后,如果我重复步骤3),则会触发功能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("");
    }

});

P.S .:
为每个渲染调用创建的DOM都可以。

1 个答案:

答案 0 :(得分: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();
}