我正在使用Node作为后端在Backbone中构建应用程序。作为应用程序的一部分,我正在处理我的视图上的点击事件。一个例子是这样的:
window.MyView = Backbone.View.extend({
tagName: 'section',
className: 'calls',
events: {
'click a.first': 'gotoFirst',
'click a.prev': 'gotoPrev',
'click a.next': 'gotoNext',
'click a.last': 'gotoLast',
'click a.page': 'gotoPage'
},
当我第一次加载视图并单击时,一切都完美无缺(点击事件得到正常处理)。但是,如果我导航到新视图,然后返回到第一个视图,则单击事件将被破坏。
通过导航到新视图,我的意思是我做了类似的事情:
$container.empty();
$container.append(window.myNewView.render().el);
然后我这样回去:
$container.empty();
$container.append(window.myView.render().el);
但是当我重新渲染视图时,我的点击事件就被打破了。我怎样才能解决这个问题?提前谢谢!
答案 0 :(得分:3)
当您通过调用.empty()
删除视图时,您正在中途销毁DOM事件。但是,在自动重新显示视图时,它们不会重新附加。
你必须跳过篮球重新连接它们。读这个:
http://tbranyen.com/post/missing-jquery-events-while-rendering
更好的答案是不重用视图实例。每次需要显示视图时创建一个新的视图实例。