Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ';单击';事件在主干中消失。使用Quicksand后查看_Javascript_Jquery_Events_Backbone.js_Quicksand - Fatal编程技术网

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"
}
和jQuery
delegate
相同的工具:

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”的引入是被禁止的。