当然,这取决于您如何重新渲染父视图。父视图在初始化阶段实例化它的所有子视图,并在渲染模板后简单地附加/替换元素。例如,我将如何在render方法中执行此操作:
this.$('.InputSearch').replaceWith(this.inputSearchView.$el);
因此this.inputSerchView是一个在initialize方法中受影响的实例。
问题是在执行了上面的行之后,在inputSearchView中不再调用事件回调,我需要这样做:
this.delegateEvents();
我不知道为什么我必须这样做,因为骨干在后台执行此操作:
this.$el.on(eventName, selector, method);
这个。$ el永远不会改变,所以我不知道是什么导致了这个问题。有什么想法吗?
答案 0 :(得分:1)
jQuery' replaceWith
使用remove并在其前面插入内容,来自jQuery的删除文档
除了元素本身之外,还删除了与元素关联的所有绑定事件和jQuery数据。
因此你应该重新绑定由el
方法完成的查看delegateEvents
元素的事件。
答案 1 :(得分:0)
重新渲染视图时,执行此操作:
view.$el.html(Handlebars.compile(view.template)(context));
html方法从子元素(来自jQuery doc)中删除事件处理程序
此外,jQuery删除了其他构造,如数据和事件 在用这些元素替换之前,来自子元素的处理程序 新内容。
这就是为什么我必须重新绑定元素/事件
答案 2 :(得分:0)
问题是this.delegateEvents()
只在Backbone.View
构造函数中被调用一次,并且一旦它运行良好就渲染它,但是在第二次渲染之后你会遇到这个问题。
选项:
render()
方法this.delegateEvents()
方法render()
醇>