首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >backbone.js中的delegateEvents

backbone.js中的delegateEvents
EN

Stack Overflow用户
提问于 2012-06-18 02:42:22
回答 2查看 24.8K关注 0票数 30

谁能解释一下backbone.js中的delegateEvents是做什么的?The documentation并没有帮助我理解。

我的确切用例是:

我有一个带有内部视图Y的主视图X。它们工作得很好,但是如果我转到主视图Z,然后回到X(重用,而不是重新创建),那么附加到Y子元素的事件就会丢失。delegateEvents解决了这个问题,但我想知道为什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-18 03:03:05

本质上,当您调用.remove()时,它是jQuery remove函数的代理,该函数从DOM中删除元素,以及从绑定到该元素的事件散列中删除所有关联的事件。

Backbone的视图元素仍然包含.el,但是在重新插入到DOM中时,jQuery元素丢失了所有它绑定的侦听器。

有几种解决方案:

  1. 完全销毁视图元素,包括使用新的destroy方法解除所有模型/控制器事件的绑定(目前仅在github中,它将在下一个Backbone版本中添加),并在返回时创建一个新视图(而不仅仅是缓存和重新渲染)-我的首选方法
  2. 创建一个方法(或扩展remove)来使用jQuery的detatch,它的功能显然与remove相同,但不会丢失事件绑定-还没有这样做,但似乎可以在每次呈现中调用
  3. .delegateEvents() -您现在正在做的事情<代码>H212<代码>G213

希望这能有所帮助。

票数 39
EN

Stack Overflow用户

发布于 2012-06-18 02:54:37

delegateEvents接受视图实例的events: { ... }声明,并使用指定的回调方法将指定的事件绑定到指定的DOM元素以处理事件。

因此,呈现后的DOM树如下所示:

代码语言:javascript
运行
复制
<div> 
  <a href="#" id="foo">foo</a>
</div>

和如下定义的视图:

代码语言:javascript
运行
复制
Backbone.View.extend({
  events: {
    "click .foo": "fooClicked"
  },

  fooClicked: function(e){
    // handle the click, here
  },

  render: function(){
    // render the specified HTML, here
  }
});

将正确处理单击"foo“链接,以便您可以在代码中响应单击。

事件声明的细目是:"eventname selector": "callback",其中“events”是任何DOM事件,比如“单击”。“选择器”是任何有效的jQuery选择器,它针对视图的el运行,以便将事件绑定到DOM元素。"callback“是在触发该DOM元素的事件时在该视图上要调用的方法的名称。

希望这能有所帮助

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11073877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档