Javascript ';单击';事件在主干中消失。使用Quicksand后查看
模型中有一个“视图”,其中包含事件Javascript ';单击';事件在主干中消失。使用Quicksand后查看,javascript,jquery,events,backbone.js,quicksand,Javascript,Jquery,Events,Backbone.js,Quicksand,模型中有一个“视图”,其中包含事件单击。在使用用于jQuery的Quicksand effects插件后,对象将释放其事件处理程序。我已尝试使用backbone.js中的标准方法为事件添加侦听器: events: { "click .objContact" : "openChat" } 和jQuerydelegate相同的工具: var self=this; this.$el.delegate('.objContact','click', function(){ sel
单击。在使用用于jQuery的Quicksand effects插件后,对象将释放其事件处理程序。我已尝试使用backbone.js中的标准方法为事件添加侦听器:
events: {
"click .objContact" : "openChat"
}
和jQuerydelegate
相同的工具:
var self=this;
this.$el.delegate('.objContact','click', function(){
self.openChat();
});
和直播
:
var self=this;
this.$el.find('.objContact').live('click', function(){
self.openChat();
});
但是单击事件消失。
有什么问题吗?我该怎么解决呢
UPD:调用“Quicksand”的是主干网。路由器(可能的更改是通过jQuery直接获得的,而不是主干网),因此更改不会在主干网中处理。查看
UPD 2:问题通过以下方式解决-将单击事件的处理从视图模型移动到视图集合。并使用live(在上的中不起作用)在相关DOM条目更改或被覆盖后调用delegateEvents()
。在传统的主干应用程序中,这通常是通过render
方法完成的,但您可能需要找出quicksand在何时何地发挥了神奇的作用(我对此一无所知),然后调用delegateEvents
,以重新激活DOM中当前元素的事件。调用delegateEvents()
相关DOM条目更改或被覆盖后。在传统的主干应用程序中,这通常是通过渲染
方法完成的,但您可能需要弄清楚quicksand何时何地发挥了神奇的作用(我对此一无所知),并调用delegateEvents,这将重新激活DOM中当前元素的事件。简单回答:而不是使用
$('a.oldJqueryClass').click(function(){....
您需要使该函数独立,并声明一个新函数
函数myfunction(params){alert(params);}
而不是你称之为“老派”的链接:
<a href="#" class="oldJqueryClass" onclick="javascript:myfunction('My alert message')">Click here</a>
通过这种方式,克隆的元素本身将包含对函数的调用,您可以忘记恢复因克隆quicksand而破坏的dom完整性
我在我的项目中做了,效果很好。简单的回答:不是用经典的ajax方法将函数链接到链接,而是
$('a.oldJqueryClass').click(function(){....
您需要使该函数独立,并声明一个新函数
函数myfunction(params){alert(params);}
而不是你称之为“老派”的链接:
<a href="#" class="oldJqueryClass" onclick="javascript:myfunction('My alert message')">Click here</a>
通过这种方式,克隆的元素本身将包含对函数的调用,您可以忘记恢复因克隆quicksand而破坏的dom完整性
我在我的项目中做了,效果很好。根据quicksand对DOM的作用,您可能需要删除事件,而不仅仅是delegateEvents
。在quicksand中有这样一行var$dest=$($sourceParent).clone()
。但是想法(和文档).live
是为新创建的项目创建一个事件,但没有成功。克隆只克隆一个元素,但不将其插入DOM AFAIK。正如mu所指出的,它如何插入DOM可能会影响事件,甚至影响附加到视图本身的元素。理论上,克隆和具有(假定是唯一的)id的元素也可能会引起混淆。您可能需要根据quicksand对DOM的作用,而不仅仅是delegateEvents
。在quicksand中,有这样一行var$dest=$($sourceParent).clone()
。但是想法(和文档).live
是为新创建的项目创建一个事件,但没有成功。克隆只克隆一个元素,但不将其插入DOM AFAIK。正如mu所指出的,它如何插入DOM可能会影响事件,甚至影响附加到视图本身的元素。从理论上讲,克隆和使用(假定是唯一的)id的元素也可能会引起混淆。是的,这个选项也很好。但是在我的例子中,代码是在Chrome的一个扩展中执行的,新规则“Manifest 2”的引入是被禁止的。是的,这个选项也很好。但在我的例子中,代码是在Chrome的扩展中执行的,新规则“Manifest 2”的引入是被禁止的。