像许多其他用户一样,我对'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传递给构造函数但没有成功。对我最明显的错误的任何帮助都将不胜感激。
答案 0 :(得分:6)
抱歉,我对coffeescript感到不舒服,不过我觉得我认出了你的事件哈希
events: {
"click div" : "testing"
}
我打赌你试图将这个测试功能绑定到你的一般视图元素的点击? 有问题。
您的点击事件实际上做了什么(选择方式):
$('div', viewElement).click(fn);
意思是,你不是以viewElement div为目标,而是将div视为视图元素。
如果要绑定到一般视图元素本身, 定义没有选择器的事件
在你的情况下:
events: {
"click" : "testing"
}