javascript - rails : javascript/jQuery callbacks are triggered twice

标签 javascript jquery ruby-on-rails actioncable

Rails 版本 5.1.3

具体来说,它是 channel js 客户端代码所在的 assets/javascripts/channels/my_channel.coffee 中的代码,以及其他通用 js 代码。我正在使用可操作的。但一般的 jQuery/javascript 回调也会受到这个问题的影响。在 JavaScript 中重写 jQuery append 并没有什么区别。

所有回调都会触发两次。也就是说,回调触发后要执行的函数被调用了两次,包括 channel 订阅和$(document).ready。具体来说,如果我把

$(some_id_name).append some_string

$(document).ready的事件函数中,会被追加两次。我也将可操作的 channel 订阅实例视为回调。 receive 方法由用户发送消息调用以触发实例。因此该方法中的代码也执行了两次。在我的例子中附加

可能整个 js 文件被加载了两次。但如何呢?

这只发生在测试和生产环境(Heroku)中,不会发生在开发环境中。暗示着什么吗?

我通过 3 个步骤干净地删除了 turbolinks,您可以通过在线搜索找到。在 application.js 中仅包含 jqueryrails-ujs 一次,不包含 jquery_ujs。不存在 public/assets

my_channel.coffee 的一部分如下所示。所有自定义函数都包含多个回调,例如 clickkeydown。如果我对它们使用unbindbind它将解决问题。但我无法将其应用于 $(document).ready 和 channel 订阅实例。

$(document).ready ->
  $('#messages').append "document is ready"
  submitQuestion()
  submitAnswer()
  hideJudgeForm()
  return

application.js

//= require jquery
//= require rails-ujs
//= require bootstrap
//= require spin.js/spin
//= require_tree .

最佳答案

嗯,我要做的第一件事就是检查我是否没有任何其他文件,包括文件 my_channel.coffee。既不作为另一个 bundle 的一部分,也不与 javascript_include_tag 一起使用。

之后,我会尝试删除所有文件中的 require_tree . 并将其替换为我希望 Rails 作为 bundle 的一部分加载的特定文件列表。因此,您可能有两个不同的文件间接导入 my_channel.coffee

关于javascript - rails : javascript/jQuery callbacks are triggered twice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46676921/

相关文章:

javascript - 为什么没有调用 document.onload ?

javascript - 用于另一个函数的多个函数参数的 CoffeeScript

javascript - 替换 "templateUrl":path with "template":content for angular directives using gulp

javascript - 对日期为 JavaScript 的字符串数组进行排序

ruby-on-rails - 项目 :Class 的未定义方法 `model_name'

javascript - javascript CustomEvent 的 jasmine 单元测试

javascript - 如何获取表中 TR 中 TD 的大陆值?

javascript - 在网站首页滑动最新消息或更新

ruby-on-rails - rails 凭据不获取

SQL:使用 OR 链接的排序范围(Ruby on Rails)