javascript - 为什么我的 View 事件没有触发?

标签 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

但是单击表单不会触发任何事件。有什么想法吗?

最佳答案

你误解了tagNameclassName工作。当您设置这些时:

tagName: "form"
className: "search"

这仅仅意味着您将拥有 <form class=​"search">​</form>​@el 。这些设置不会将您的 View 绑定(bind)到 form.search 的内容。选择器匹配,并且您永远不会添加 @el到 DOM,这样你的事件最终就不会绑定(bind)到任何东西。

如果您想使用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/

如果您想绑定(bind)到现有 HTML,那么您可以使用 el而不是tagNameclassName像这样:

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

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

关于javascript - 为什么我的 View 事件没有触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9203733/

相关文章:

javascript - 如何根据条件替换 JavaScript 变量?

javascript - 不允许双下划线的正则表达式,除非它在单词的末尾后跟 'x' 符号

javascript - 如何在js函数中获取元素id?

Backbone.js - 属性与属性

javascript - 如何在 BackboneJS 中显示模型属性的选择列表(下拉列表)?

backbone.js - 您可以在Backbone.js集合上设置属性吗?如果是这样,怎么办?

javascript - 如果我使用主干验证,我如何测试模型的验证

javascript - 无法调用 java/coffeescript 中的实例方法

javascript - 这是 backbone.js 中的正常现象吗?

javascript - 防止方法在 Meteor 的服务器上自动运行