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中。