Почему бы не запустить костяк моего мероприятия? - PullRequest
0 голосов
/ 20 января 2012

Мой класс определяется следующим образом:

class NewUser extends Backbone.View
  template : JST["backbone/templates/events/new"]
  events : 
    'click button' : 'hello'
  hello : ->
    alert('hi')
  render : ->
    @el = $(@template())
    @ 

Я инициализирую страницу следующим образом:

$('body').append(new NewUser().render().el)

Тем не менее, когда я нажимаю кнопку, предупреждение не отображается.Кто-нибудь видит что-то не так с моим кодом?Представление отображается, но события никогда не регистрируются.

Ответы [ 2 ]

1 голос
/ 20 января 2012

Вы создаете @el по вашему render методу:

render : ->
    @el = $(@template())
    @ 

но вы не звоните delegateEvents:

Использует функцию jQuery delegate для предоставления декларативных обратных вызовов для событий DOM в представлении. [...] По умолчанию, delegateEvents вызывается в конструкторе View для вас [...]

Итак, ваши события никогда не привязываются к @el, который вы добавляете в DOM, и ваша кнопка не делает ничего полезного. Ваш render должен выглядеть так:

render : ->
    @el = $(@template())
    @delegateEvents()
    @
0 голосов
/ 20 января 2012

Является ли кнопка частью шаблона, которая отображается в представлении el?

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

render : ->
  @el = $(@template());
  $('#buttonId').click(@hello);
...