JavaScript 每次请求都会获取资产

JavaScript assets are fetched on each request

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

alertClicked = ->
  alert 'Clicked'

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

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

有人知道问题出在哪里吗?

O.K., 因此 jquery.turbolinks README points out:

You should be binding your events outside a $(function()) block. This will ensure that your events will only ever be bound once.

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

alertClicked = ->
  alert 'Clicked'

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

一切都按预期进行。