Backbone - 在一个$ el上绑定多个视图(事件是重复的)

时间:2014-05-03 09:32:21

标签: javascript backbone.js backbone-views backbone-events

我有一个用于待办事项列表的容器.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")

如何避免这种情况(为每个列表创建不同的视图)?感谢。

1 个答案:

答案 0 :(得分:0)

您的问题是,由于您对不同的视图使用相同的el,因此在渲染视图时,它不会取消绑定上一个视图的事件。

在渲染视图之前,请使用:

this.undelegateEvents();