为什么我的观看事件没有解雇?

时间:2012-02-09 00:22:52

标签: javascript backbone.js coffeescript

这是我的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 个答案:

答案 0 :(得分:2)

您误解了tagNameclassName的工作原理。当你设置这些:

tagName: "form"
className: "search"

这只意味着<form class=​"search">​</form>​中有@el。这些设置不会将您的视图绑定到form.search选择器匹配的内容,并且您永远不会将@el添加到DOM中,因此您的事件最终不会绑定到任何内容。

如果您想使用tagNameclassName,那么您需要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代替tagNameclassName,如下所示:

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

演示:http://jsfiddle.net/ambiguous/FfDg6/