【问题标题】:Backbone Dynamically created 'el' not binding events骨干动态创建的“el”不绑定事件
【发布时间】:2012-01-17 03:53:02
【问题描述】:

像这里的许多其他用户一样,我对el 和事件有疑问。在我的情况下,我测试了多种解决方案,包括使用默认的el(只是<div></div>)设置tagName,使用jQuery 选择器将el 设置为选择器并等待DOM 准备好。这些解决方案中的每一个都无法绑定事件,并且除了默认的 eltagName 之外的所有解决方案都无法生成 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 传递给构造函数,但没有成功。对我最可能的明显错误的任何帮助将不胜感激。

【问题讨论】:

    标签: javascript backbone.js coffeescript backbone-events


    【解决方案1】:

    抱歉,我对 coffeescript 不满意,但我想我认出了你的事件哈希

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

    我敢打赌,您正在尝试将此测试功能绑定到单击您的一般视图元素? 有问题。

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

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

    意思是,您的目标不是 viewElement div,而是 div 的 INSIDE 视图元素。

    如果你想绑定到通用视图元素本身, 定义一个没有选择器的事件

    在你的情况下:

    events: {
      "click" : "testing"
    }
    

    【讨论】:

    • 行得通!我曾假设“点击”将与文档相关,而不是与视图元素相关。谢谢你的解释。
    • 这个假设是错误的,事件哈希总是在视图元素的范围内,因此,没有任何东西的点击会绑定到 el 本身,点击它后面的东西会在 el 内搜索。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2020-09-29
    相关资源
    最近更新 更多