JavaScript资产在每个请求中都被提取

JavaScript资产在每个请求中都被提取,javascript,ruby-on-rails,coffeescript,turbolinks,Javascript,Ruby On Rails,Coffeescript,Turbolinks,我怀疑我将要描述的问题是由TurboLink引起的,但我不知道是如何引起的。我使用的是Rails 4、Turbolinks 3.0和jquery.Turbolinks。假设有这样一个咖啡脚本: alertClicked = -> alert 'Clicked' $ -> $(document).on 'click', '.foo', -> alertClicked() 当我第一次加载页面并单击“.foo”时,我收到一个警报。如果我访问一个链接并再次单击“.foo”,

我怀疑我将要描述的问题是由TurboLink引起的,但我不知道是如何引起的。我使用的是Rails 4、Turbolinks 3.0和jquery.Turbolinks。假设有这样一个咖啡脚本:

alertClicked = ->
  alert 'Clicked'

$ ->
  $(document).on 'click', '.foo', -> alertClicked()
当我第一次加载页面并单击“.foo”时,我收到一个警报。如果我访问一个链接并再次单击“.foo”,我现在会收到两个警报。另一个链接访问会导致三个警报,以此类推。我想,Turbolinks在每次请求时都会获取CoffeeScript资产,并且这些资产会累积,因此相同的脚本会多次执行。然而,至少在Chrome中,当我转到Dev Tools->Source时,我只看到文件的单个副本

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

好的,因此:

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

遵循此建议,我的示例如下所示:

alertClicked = ->
  alert 'Clicked'

$(document).on 'click', '.foo', -> alertClicked()
一切正常。

好的,因此:

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

遵循此建议,我的示例如下所示:

alertClicked = ->
  alert 'Clicked'

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

一切正常。

在.on(@DenizEng)之前尝试添加.off('click')。好的,这样就可以了,但是你能解释一下原因吗?这不是一个解决方法还是一个已执行的行为?它会影响应用程序其他页面上的其他Java脚本吗?谢谢。你已经多次绑定事件处理程序。尝试添加.off('click'))before.on(@DenizEng)好的,那么这是可行的,但是你能解释为什么吗?这不只是一个解决方法还是一个EXEPCED行为?它会影响应用程序其他页面上的其他Java脚本吗?谢谢。你绑定了多次事件处理程序。