【问题标题】:JavaScript assets are fetched on each request每次请求都会获取 JavaScript 资产
【发布时间】:2016-02-13 20:59:10
【问题描述】:

我怀疑我要描述的问题是由 Turbolinks 引起的,但我不知道是怎么回事。我正在使用 Rails 4、Turbolinks 3.0 和 jquery.turbolinks。假设有这个 CoffeeScript:

alertClicked = ->
  alert 'Clicked'

$ ->
  $(document).on 'click', '.foo', -> alertClicked()

当我第一次加载页面并单击“.foo”时,我会收到一个警报。如果我访问一个链接并再次单击“.foo”,我现在会收到两个警报。另一个链接访问会导致三个警报,依此类推。我想,Turbolinks 会在每个请求上获取 CoffeeScript 资产并累积它们,以便多次执行相同的脚本。但是,至少在 Chrome 中,当我转到 Dev Tools -> Source 时,我只能看到文件的单个副本。

有人知道问题可能是什么吗?

【问题讨论】:

  • 尝试在 .on( 之前添加 .off('click')
  • @DenizEng 好的,所以这行得通,但你能解释一下为什么吗?这不只是一种解决方法还是预期的行为?它会影响在应用程序的其他页面上起作用的其他 javascript 吗?谢谢。
  • 您多次绑定事件处理程序。

标签: javascript ruby-on-rails coffeescript turbolinks


【解决方案1】:

好的,就像jquery.turbolinks README points out

您应该在 $(function()) 块之外绑定您的事件。这将确保您的事件只会被绑定一次。

按照这个建议,我的示例将如下所示:

alertClicked = ->
  alert 'Clicked'

$(document).on 'click', '.foo', -> alertClicked()

一切都按预期进行。

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 2015-06-10
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多