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

Xav*_*nis 1 javascript javascript-events coffeescript backbone.js

像许多其他用户一样,我有'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()
Run Code Online (Sandbox Code Playgroud)

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

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

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

San*_*der 6

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

events: {
  "click div" : "testing"
}
Run Code Online (Sandbox Code Playgroud)

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

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

$('div', viewElement).click(fn);
Run Code Online (Sandbox Code Playgroud)

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

如果要绑定到常规视图元素本身,请定义不带选择器的事件

在你的情况下:

events: {
  "click" : "testing"
}
Run Code Online (Sandbox Code Playgroud)