我有一个用于待办事项列表的容器.js-todoslist
。我也为每个todolist提供了几个视图TodosListView
。所有TodosListView
都是从父视图创建的,并将绑定到相同的el .js-todoslist
。
Todos列表不会在初始化时呈现,我需要渲染不同的Todos'通过单击按钮列出列表,以便每个列表都显示showTodolist
方法。
问题是,虽然目前只能呈现一个列表,但所有实际上都已初始化。当我在呈现的列表中按.add-btn
时,所有列表都会触发add
功能(不仅是当前呈现的)。
TodosListView = Backbone.View.extend
events:
"click .add-btn": "add"
initialize: (options) ->
self = this
@model = @options.model
# I've tried to undelegate event after initialize, but no luck
# @$el.undelegate('.add-btn', 'click');
# @undelegateEvents()
# show this todolist
showTodolist: ->
@$el.html @template(@model.toJSON())
render: ->
@
add: ->
console.log "Add to Todos list #" + @model.get("id")
如何避免这种情况(为每个列表创建不同的视图)?感谢。
答案 0 :(得分:0)
您的问题是,由于您对不同的视图使用相同的el,因此在渲染视图时,它不会取消绑定上一个视图的事件。
在渲染视图之前,请使用:
this.undelegateEvents();