这是我的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
但是点击表单不会触发任何事件。有什么想法吗?
答案 0 :(得分:2)
您误解了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'
#...