Backbone动态创建'el'不绑定事件

时间:2011-12-09 22:33:30

标签: javascript javascript-events backbone.js coffeescript

像许多其他用户一样,我对'el'和事件有疑问。在我的情况下,我已经测试了多个解决方案,包括使用默认的el(只是'')设置tagName,使用jQuery选择器将el设置为选择器,并为DOM做好准备。这些解决方案中的每一个都无法绑定事件,除了默认的el和tagName在生成html时都失败了。 相关代码 图

$ ->
   class Aggregator.Views.Streams.StreamView extends Backbone.View
      template:JST["backbone/templates/stream"]
      el: $('.item')
      events:
       "click div" : "testing"
      initialize: (model)->
       console.log @el
       _.bindAll this , 'render'
       @model.bind 'change', @render
       @model.view = @
       @render()
       @delegateEvents()
      render: ->
       $(@el).html  "test"
       console.log @el
       @
      testing: ->
       alert "EVENT"
       #@model.clear()

调用视图的函数(从另一个视图中提取)

view = new Aggregator.Views.Streams.StreamView({model: stream})
    console.log view.el
    $(@el).append view.render().el

我有点困惑,我设置了el,但它要么不创建,要么不绑定事件。我已经尝试等待DOM加载并将el传递给构造函数但没有成功。对我最明显的错误的任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:6)

抱歉,我对coffeescript感到不舒服,不过我觉得我认出了你的事件哈希

events: {
  "click div" : "testing"
}

我打赌你试图将这个测试功能绑定到你的一般视图元素的点击? 有问题。

您的点击事件实际上做了什么(选择方式):

$('div', viewElement).click(fn);

意思是,你不是以viewElement div为目标,而是将div视为视图元素。

如果要绑定到一般视图元素本身, 定义没有选择器的事件

在你的情况下:

events: {
  "click" : "testing"
}