rails: javascript/jQuery 回调被触发两次
rails: javascript/jQuery callbacks are triggered twice
Rails 版本 5.1.3
具体来说,它是 assets/javascripts/channels/my_channel.coffee
频道 js 客户端代码所在的代码,以及其他通用 js 代码。我正在使用动作电缆。但是一般的 jQuery/javascript 回调也会受到这个影响。在 javascript 中重写 jQuery append
没有任何区别。
所有的回调都被触发了两次。也就是说,触发回调后要执行的函数被调用了两次,包括频道订阅和$(document).ready
。具体来说,如果我把
$(some_id_name).append some_string
在$(document).ready
中的事件函数中,会追加两次。我也将 actioncable 频道订阅实例视为回调。 receive
方法由用户发送消息调用以触发实例。所以该方法中的代码也执行了两次。 append
就我而言。
可能是整个 js 文件被加载了两次。但是如何呢?
这只发生在测试和生产环境(Heroku)中,而不是在开发环境中。暗示什么?
我通过 3 个步骤彻底删除了 turbolinks
,您可以通过在线搜索找到。在 application.js
中只包含 jquery
和 rails-ujs
一次,没有 jquery_ujs
。不存在 public/assets
。
my_channel.coffee
的一部分如下所示。所有自定义函数都包含多个回调,如 click
、keydown
。如果我对他们使用 unbind
和 bind
它将解决问题 。但我无法将其应用于 $(document).ready
和频道订阅实例。
$(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
。既不作为另一个捆绑包的一部分,也不与 javascript_include_tag
.
之后,我会尝试删除所有文件中的 require_tree .
,并将其替换为我希望 Rails 作为捆绑包的一部分加载的特定文件列表。因此,您可能有两个不同的文件间接导入 my_channel.coffee
。
Rails 版本 5.1.3
具体来说,它是 assets/javascripts/channels/my_channel.coffee
频道 js 客户端代码所在的代码,以及其他通用 js 代码。我正在使用动作电缆。但是一般的 jQuery/javascript 回调也会受到这个影响。在 javascript 中重写 jQuery append
没有任何区别。
所有的回调都被触发了两次。也就是说,触发回调后要执行的函数被调用了两次,包括频道订阅和$(document).ready
。具体来说,如果我把
$(some_id_name).append some_string
在$(document).ready
中的事件函数中,会追加两次。我也将 actioncable 频道订阅实例视为回调。 receive
方法由用户发送消息调用以触发实例。所以该方法中的代码也执行了两次。 append
就我而言。
可能是整个 js 文件被加载了两次。但是如何呢?
这只发生在测试和生产环境(Heroku)中,而不是在开发环境中。暗示什么?
我通过 3 个步骤彻底删除了 turbolinks
,您可以通过在线搜索找到。在 application.js
中只包含 jquery
和 rails-ujs
一次,没有 jquery_ujs
。不存在 public/assets
。
my_channel.coffee
的一部分如下所示。所有自定义函数都包含多个回调,如 click
、keydown
。如果我对他们使用 unbind
和 bind
它将解决问题 。但我无法将其应用于 $(document).ready
和频道订阅实例。
$(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
。既不作为另一个捆绑包的一部分,也不与 javascript_include_tag
.
之后,我会尝试删除所有文件中的 require_tree .
,并将其替换为我希望 Rails 作为捆绑包的一部分加载的特定文件列表。因此,您可能有两个不同的文件间接导入 my_channel.coffee
。