使用Quicksand后,“click”事件在Backbone.View中消失

时间:2012-09-08 20:24:50

标签: javascript jquery events backbone.js quicksand

模型中有一个带有事件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中无效)

2 个答案:

答案 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中当前元素的事件。