为什么每次重新渲染父视图时都需要重新委派子视图的事件
Why do I need to re-delegate the events of a child view every time the parent view is being re-rendered?
当然,这将取决于如何重新呈现父视图。父视图在初始化阶段实例化它的所有子视图,并在模板呈现后简单地附加/替换它们。例如,这就是我在渲染方法中的做法:
this.$('.InputSearch').replaceWith(this.inputSearchView.$el);
因此this.putSerchView是一个在initialize方法中受到影响的实例。
问题是,在执行了上面的行之后,inputSearchView中不再调用事件回调,我需要做:
this.delegateEvents();
我不知道为什么我必须这样做,因为主干网在后台这样做:
this.$el.on(eventName, selector, method);
这个$我从不改变,所以我不知道是什么原因造成了问题。有什么想法吗?
jQuery的replaceWith
使用remove,并在其之前插入jQuery的remove文档中的内容
除了元素本身,所有绑定的事件和与元素关联的jQuery数据都将被删除。
因此,您应该重新绑定视图el
元素的事件,这是由delegateEvents
方法完成的。
重新渲染视图时,执行以下操作:
view.$el.html(Handlebars.compile(view.template)(context));
html方法从子元素(从jQuery文档)中删除事件处理程序
此外,jQuery还删除了数据和事件等其他构造处理程序,然后将这些元素替换为新内容。
这就是为什么我必须重新绑定元素/事件
问题是this.delegateEvents()
在Backbone.View
构造函数内只调用一次,当您渲染一次它时,它工作得很好,但在第二次渲染后,您会遇到这个问题。
选项:
- 初始化父视图
render()
方法内的子视图 - 在子视图
render()
方法中使用this.delegateEvents()
相关文章:
- 如何使用javascript从主svg对象动态创建svg视图框
- 正在使用$location.path(.)路由ng视图
- angular.js没有'无法在PhoneGap中处理视图标记
- 如何包含特定于每个视图angularjs的javascript文件
- 通过在Dojo mobile ViewController.openExternalView中动态更改打开同一外部视图的
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- Ajax Live搜索发布到Laravel视图
- backbone.js无法渲染视图
- 根据某些条件在视图之间切换
- ng视图外的链接重定向到ng视图内的页面
- 如何在Jquery中发布后将值从视图返回到控制器
- 将日期时间作为 JSON 发送将无法在我的视图中正确显示
- 使用Scala Play Framework视图中的键检索映射值
- FF视图源|脚本高亮显示为红色
- 如何使bxslider仅在移动视图中处于活动状态
- 为什么每次重新渲染父视图时都需要重新委派子视图的事件
- 不再需要视图后取消委派事件的最佳方法
- 将事件委派给主干中的父视图
- 骨干视图委派事件获胜'不起作用
- 在setElement上取消委派子视图事件