Почему мои взгляды на события не стреляют? - PullRequest
0 голосов
/ 09 февраля 2012

Вот мой код CoffeeScript:

$(document).ready ->
  SearchView = Backbone.View.extend
    tagName: "form"
    className: "search"
    events: {
      "click label":"search"
    }
    search: ->
      console.log("HERE")

  searchView = new SearchView()

А вот мой HTML:

%form#search.search
  %label
    Search
  %input

Но нажатие на форму не вызывает никаких событий.Есть идеи почему?

1 Ответ

2 голосов
/ 09 февраля 2012

Вы неправильно понимаете, как работают tagName и className. Когда вы установите их:

tagName: "form"
className: "search"

Это просто означает, что у вас будет <form class=​"search">​</form>​ в @el. Эти настройки не привязывают ваш взгляд к тому, что соответствует селектору form.search, и вы никогда не добавляете @el в DOM, чтобы ваши события не заканчивались ничем.

Если вы хотите использовать tagName и className, тогда вам нужно, чтобы render уточнил вашу форму:

render: ->
    $(@el).append('<label>Search</label><input>')
    @

И тогда вы бы позвонили render и добавили el к DOM примерно так:

searchView = new SearchView()
$('div').append(searchView.render().el) # 'div' is just an example of course

Демо: http://jsfiddle.net/ambiguous/ubqqE/

Если вы хотите привязать к существующему HTML, вы можете использовать el вместо tagName и className следующим образом:

SearchView = Backbone.View.extend
    el: '#search'
    #...

Демо: http://jsfiddle.net/ambiguous/FfDg6/

...