Backbone Динамически созданный 'el', не связывающий события

Как и у многих других пользователей здесь, у меня проблема с el и событиями. В моей ситуации я протестировал несколько решений, включая использование значения по умолчанию el (просто <div></div>) tagName, установку el для селектора с использованием селектора jQuery и ожидание готовности DOM. Каждое из этих решений не смогло связать события, и все, кроме el и tagName по умолчанию, не смогли создать html. Соответствующий код:

Вид

$ ->
   class Aggregator.Views.Streams.StreamView extends Backbone.View
      template:JST["backbone/templates/stream"]
      el: $('.item')
      events:
       "click div" : "testing"
      initialize: (model)->
       console.log @el
       _.bindAll this , 'render'
       @model.bind 'change', @render
       @model.view = @
       @render()
       @delegateEvents()
      render: ->
       $(@el).html  "test"
       console.log @el
       @
      testing: ->
       alert "EVENT"
       #@model.clear()

Функция, вызывающая представление (извлеченное из другого представления)

view = new Aggregator.Views.Streams.StreamView({model: stream})
    console.log view.el
    $(@el).append view.render().el

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


person Xavier Denis    schedule 09.12.2011    source источник


Ответы (1)


Извините, мне не нравится coffeescript, хотя я думаю, что узнал ваш хэш события

events: {
  "click div" : "testing"
}

Бьюсь об заклад, вы пытаетесь связать эту функцию тестирования с щелчком по элементу общего вида? есть проблема.

что на самом деле делает ваше событие клика (с точки зрения селектора):

$('div', viewElement).click(fn);

это означает, что вы не нацеливаете div viewElement, а div ВНУТРИ вашего элемента представления.

если вы хотите привязаться к самому элементу общего вида, определите событие без селектора

в твоем случае:

events: {
  "click" : "testing"
}
person Sander    schedule 09.12.2011
comment
это работает! я предполагал, что щелчок будет относиться к документу, а не к элементу представления. Спасибо за объяснение. - person Xavier Denis; 10.12.2011
comment
ну, это предположение неверно, хэш события всегда ограничен элементом представления, и, таким образом, щелчок без чего-либо будет привязан к самому el, щелчок с чем-то за ним будет искать внутри el. - person Sander; 10.12.2011