0

模型中有一个带有事件的“视图” click。使用 jQuery 的流沙效果插件后,对象失去了它们的事件处理程序。我试图在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

4

2 回答 2

2

简单答案:而不是将函数链接到使用经典 ajax 方法的链接,即

$('a.oldJqueryClass').click(function(){....

您需要使该功能独立,声明一个新功能

功能 myfunction(params) {alert(params);}

比在你用旧学校方式调用的链接中:

<a href="#" class="oldJqueryClass" onclick="javascript:myfunction('My alert message')">Click here</a>

通过这种方式,克隆的元素将包含对函数的调用,您可以忘记恢复因流沙克隆而破坏的 dom 完整性。

我在我的项目中做到了,效果很好。

于 2012-10-11T02:06:14.083 回答
1

delegateEvents()在相关的 DOM 条目发生更改或被覆盖后执行调用。在传统的 Backbone 应用程序中,这通常是在render方法中完成的,但您可能需要弄清楚流沙在何时何地发挥作用(我对此一无所知),并调用delegateEvents它将重新激活当前元素中的事件DOM。

于 2012-09-08T20:37:42.540 回答