javascript - 如何在不取消绑定(bind)事件的情况下分离然后重新附加 Backbone.View?

标签 javascript dom backbone.js

我有一个由嵌套 subview 组成的主干系统,我偶尔需要在其中执行以下操作。

  1. 从 DOM 中分 ionic View
  2. 从头开始重新渲染父 View (从模板)
  3. 在正确的位置重新附加 subview 地点

我通过调用类似 $(parent.el).html(...) 然后 $(parent.el).append(child.el)

我一直看到的这种技术是 child 的事件处理程序丢失了。所以我尝试了很多方法,但到目前为止都没有用。

  1. 首先使用 $.detach() 分离 child.el
  2. 克隆 child.el 节点并重新附加克隆
  3. 重新连接后再次调用 child.delegateEvents()

唯一对我有用的是从头开始完全重建 subview 。有人有什么想法吗?重新连接现有节点会更有效率。

谢谢!

最佳答案

我刚刚遇到了类似的问题。这似乎对我有用:

this.undelegateEvents();
this.$el.hide();
this.$el.detach();

// do whatever here

this.$el.appendTo(containerElement);
this.delegateEvents();
this.$el.slideDown('fast');

我仍然不确定为什么事件监听器消失了,尽管当我查看 Chrome 开发者工具窗口时我可以确认它们确实消失了。这很奇怪,因为 Roatin Marth 有一个例子 ( http://jsfiddle.net/Xcrhb/1 ) 没有发生这个问题。

关于javascript - 如何在不取消绑定(bind)事件的情况下分离然后重新附加 Backbone.View?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8343438/

相关文章:

javascript - querySelector,通配符元素匹配?

javascript - 单片主干路由器

javascript - Eslint 不尊重 jsconfig 路径

javascript - 有时alert()会让IE做一些IE在没有它的情况下拒绝做的事情

dom - 文档对象模型 (DOM) 概念背后的真正思想是什么?

javascript - jQuery e.preventDefault 仅在第一次单击时不起作用

javascript - 处理 Socket.io 事件的最佳实践?

javascript - javascript 中的方法、函数、this

javascript - Backbone.js 路由器/ View 逻辑

javascript - 无法在主干中使用 BaseView 调用未定义的方法 'extend'