我有一个由嵌套子视图组成的Backbone系统,我偶尔会在其中执行以下操作。
我通过调用$(parent.el).html(...)
然后$(parent.el).append(child.el)
我一直看到的这种技术是孩子的事件处理程序丢失了。所以我尝试过很多东西,到目前为止都没有。
$.detach()
唯一对我有用的是从头开始重建子视图。有没有人有任何想法?重新连接现有节点会更有效率。
谢谢!
答案 0 :(得分:3)
我遇到了类似的问题。这似乎对我有用:
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)没有出现这个问题。
答案 1 :(得分:1)
我做的完全一样。
// First of all pre-render child view
childView.render();
// Append in one place
parentView.$el.append(childView.el);
// Detach in another place
childView.$el.detach();
// And append it again
parentView.$el.append(childView.el);
答案 2 :(得分:-2)
你正在尝试做什么似乎是对Backbone的黑客攻击。通过设置事件委派和重新呈现视图而不是分离,克隆,更改和重新附加,最好使用本机功能。这样做不会增加任何性能。
如果您解释了为什么需要这样做以及为什么本地Backbone的做事方式对您不起作用,那么帮助会更容易。