Javascript 主干:如何将myView呈现到DOM中

Javascript 主干:如何将myView呈现到DOM中,javascript,backbone.js,backbone-events,Javascript,Backbone.js,Backbone Events,我希望这段代码足以理解这个问题。 问题是, 1) 我第一次加载myView, 2) 如果我单击div#myId,功能myAction将按预期触发一次。 3) 如果为另一个视图调用方法remove,则会触发两次函数myAction。 4) 然后,如果我重复步骤3),函数myAction将触发三次,依此类推 有什么问题吗 var myView = Backbone.View.extend({ // The DOM events specific to an item. events

我希望这段代码足以理解这个问题。
问题是,

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

});
附言:

为每个渲染调用创建的DOM是正常的。

通常这里的问题是,您处于某种状态,在这种状态下,您在预定义元素上一次又一次地渲染视图,而没有正确地破坏视图,从而导致“僵尸”视图。如果您在视图中定义了一个
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方法中,您需要做的更多的事情是这样的

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

通常这里的问题是,您处于某种状态,在这种状态下,您在一个预定义的元素上一次又一次地渲染视图,而没有正确地破坏视图,从而导致“僵尸”视图。如果您在视图中定义了一个
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方法中,您需要做的更多的事情是这样的

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

我可能误解了,但为什么在最初加载视图时会触发
单击事件?您是否在某处手动触发了一个
点击
事件?我不太清楚。让我解释一下。在我第一次加载视图,然后单击div#myId之后,函数myAction只被调用了一次。这可能是我的误解,但是为什么在最初加载视图时会触发
click
事件呢?您是否在某处手动触发了一个
点击
事件?我不太清楚。让我解释一下。在我第一次加载视图,然后单击div#myId之后,函数myAction只被调用了一次。非常感谢您的清晰响应。但问题依然存在。奇怪的是:如果我从js控制台运行命令
$el.unbind()事件将持续。如果我运行
$el.bind(“单击”,函数(){some code})触发两个事件(BB+新功能)。看来bind有效,unbind无效。更新您的原始问题,了解如何将myView呈现到DOM中,我来看看。我认为Vincent无意将您的问题标题更改为“如何将myView呈现到DOM中”,但是在你的问题中解释一下你是如何在你的问题主体中把myView呈现到DOM中的。谢谢你的回答非常清楚。但问题依然存在。奇怪的是:如果我从js控制台运行命令
$el.unbind()事件将持续。如果我运行
$el.bind(“单击”,函数(){some code})触发两个事件(BB+新功能)。看来bind有效,unbind无效。更新您的原始问题,了解如何将myView呈现到DOM中,我来看看。我认为Vincent的意思不是将您的问题标题改为“如何将myView呈现到DOM中”,而是在您的问题中解释您如何在问题主体中将myView呈现到DOM中。