【问题标题】:Backbone not binding events to jQuery Popover主干没有将事件绑定到 jQuery Popover
【发布时间】:2011-12-20 11:35:51
【问题描述】:

这个问题似乎与其他一些帖子中提出的问题相似:herehere。我觉得我理解了这个概念,但我仍然遇到问题。

我正在将 Twitter Bootstrap 用于 javascript 弹出框;弹出框是我要绑定事件的地方。每次调用 .popover('show')/.popover('hide') 时,Bootstrap javascript 都会插入/删除 html。绑定到弹出框内的 html 的事件不会被调用。根据我的阅读,Backbone 使用 jQuery.delegate() 所以 html 是否存在无关紧要,但有些东西不能正常工作

events:
    "click"             : "popover"
    "click .close"      : "close_popover"

在这些事件中,第一个点击事件有效,但第二个(在弹出框内)无效。

popover: ->
  @el.popover('show')
  @delegateEvents(@events) #added from link

close_popover: ->
  @el.popover('hide')

谢谢。

在重复问题的 jsFiddle 上工作。从建议的link添加代码--仍然不起作用。

【问题讨论】:

  • 你能给我们更多的查看代码吗?一个 jsFiddle 会更好。

标签: jquery backbone.js coffeescript


【解决方案1】:

您的代码看起来不错。您能否确认一个具有类close 的元素作为您的视图el 的子元素存在,并且它就是您实际点击的元素? (尝试右键单击元素并使用 Chrome 开发者工具或 Firebug 检查它)。

【讨论】:

  • 你是对的。它不是 el 的一部分。如果我更改 el 参考,它会起作用。例如。 popover: -> @el.popover('show') @el = $(".popover") @delegateEvents(@events) 但随后我失去了与调用弹出框的元素的绑定。在这个image 中,您可以看到弹出框和日历事件。如果我更改了 el,那么在我关闭弹出框后,单击该元素就不会再打开它了。在关闭时将 el 重置回事件元素是否有意义?
  • 是的,您希望修复@el...相反,由于您将事件绑定到@el 之外的元素,您应该从render 进行绑定事件。它应该类似于:$('.close').live 'click', -> ....
  • 谢谢。我很好奇,在视图中更改@el有什么问题?
  • 这只是令人困惑,仅此而已。更改 @el 指向的内容并没有错,但是当您作为编程人员不知道它在任何给定时刻指向的内容时,就会出现问题,因为它取决于某处的某个状态。
【解决方案2】:

您可能会遗漏一些在编写 CoffeeScript 时至关重要的缩进:

而不是

events:
"click"             : "popover" 
"click .close"      : "close_popover"

你想缩进事件

events:
    "click"        : "popover"
    "click .close" : "close_popover"

如果没有缩进,事件将成为对象的属性,而不是“事件”属性,并且它们永远不会被注册。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多