Backbone - привязать несколько представлений к одному $ el (события дублируются)

У меня есть контейнер .js-todoslist для списков дел. Также у меня есть несколько просмотров 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")

Как этого избежать (кроме создания разных представлений для каждого списка)? Спасибо.


person f1nn    schedule 03.05.2014    source источник
comment
Попробуйте метод backbone setElement   -  person MarshalSHI    schedule 03.05.2014
comment
@meshuai, вы имеете в виду, что после вызова showTodolist использовать setElement для указания свойства el?   -  person f1nn    schedule 03.05.2014
comment
после рендеринга списка задач diff   -  person MarshalSHI    schedule 03.05.2014


Ответы (1)


Ваша проблема в том, что, поскольку вы используете один и тот же el для разных представлений, при рендеринге представления он не отменяет события предыдущего представления.

Перед рендерингом представления используйте:

this.undelegateEvents();
person Abhilash Chelankara    schedule 05.05.2014