2012-02-09 97 views
0

這裏是我的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 

但點擊窗體不會觸發任何事件。任何想法爲什麼?

回答

2

您誤解了tagNameclassName是如何工作的。當設置這些:

tagName: "form" 
className: "search" 

這僅僅意味着你必須在@el<form class=​"search">​</form>​。這些設置不會將您的視圖綁定到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/