模型中有一个带有事件click
的“视图”。在为jQuery使用Quicksand效果插件之后,对象会丢失它们的事件处理程序。我试图在backbone.js中使用标准方法为事件添加侦听器:
events: {
"click .objContact" : "openChat"
}
和jQuery delegate
相同的工具:
var self=this;
this.$el.delegate('.objContact','click', function(){
self.openChat();
});
和live
:
var self=this;
this.$el.find('.objContact').live('click', function(){
self.openChat();
});
但click
事件消失了。
可能是什么问题呢?我该如何解决呢?
UPD:调用'Quicksand'在Backbone.Router中(可以通过jQuery直接获得更改,而不是Backbone),因此Backbone.View中不会处理更改
UPD 2:通过以下方式解决问题 - 将click
事件的处理从View-model移至View-collection。并使用直播进行处理(在on
中无效)
答案 0 :(得分:2)
简单答案:而不是使用
的经典ajax方法将函数链接到链接$('a.oldJqueryClass').click(function(){....
你需要独立完成该功能,声明一个新功能
function myfunction(params){alert(params);}
比你用旧学校方式称之为的链接:
<a href="#" class="oldJqueryClass" onclick="javascript:myfunction('My alert message')">Click here</a>
通过这种方式,克隆元素将包含对函数的调用,您可以忘记恢复通过克隆流沙而破坏的dom完整性。
我在我的项目中做到了,它工作正常。
答案 1 :(得分:1)
在相关DOM条目更改或被覆盖后,调用delegateEvents()
。在传统的Backbone应用程序中,这通常是在render
方法中完成的,但您可能需要弄清楚流沙的时间和地点是否有魔力(我对此一无所知),并调用delegateEvents
将重新激活DOM中当前元素的事件。