除非使用 turbolinks 和 rails 4 重新加载页面,否则 javascript 不会执行

Posted

技术标签:

【中文标题】除非使用 turbolinks 和 rails 4 重新加载页面,否则 javascript 不会执行【英文标题】:javascript not executed unless reloading page using turbolinks and rails 4 【发布时间】:2014-06-06 10:23:08 【问题描述】:

我关注了railscast tutorial,但我发现我无法加载“已保存的令牌”。

我认为问题在于当点击“编辑”链接(由脚手架创建)时,

它没有触发预加载功能,你如何解决Rails 4中的问题

查看页面

  .form-inputs
    = f.input :name
    = f.input :content
    = f.text_field :user_tokens, data: load: @article.users

我的咖啡脚本

$(document).ready -> 
  $('#article_user_tokens').tokenInput '/users.json',
    theme: 'facebook',
    prePopulate: $('#article_user_tokens').data('load')

需要css和js文件

 *= require token-input-facebook
 //= require jquery.tokeninput

我通过这个解决方案修复了这个错误,使用ready page:load

但我不明白,为什么会这样

$(document).on "ready page:load", ->
  $('#article_user_tokens').tokenInput '/users.json',
    theme: 'facebook',
    prePopulate: $('#article_user_tokens').data('load')

【问题讨论】:

Rails 4: how to use $(document).ready() with turbo-links的可能重复 【参考方案1】:

启用 Turbolinks 后,Rails 使用 Ajax 仅加载页面中已更改的元素,而不是加载整个新页面。出于这个原因,从 jQuery $(document).ready 的角度来看,通常没有页面加载。有关在 Rails 4 中使用 .js 的精彩帖子,请参阅 here。

$(document).on 'ready, page:change' 经常在由于 Rails 4 中的 Turbolinks 而无法完全重新加载的页面上用作 $(document).ready 的替代品。我认为如果您切换到该页面,您的问题应该会消失。

$(document).on "ready page:load" 的语法可能也有些偏差。当您在readypage 之间缺少逗号时,会出现other reports 的问题。

【讨论】:

以上是关于除非使用 turbolinks 和 rails 4 重新加载页面,否则 javascript 不会执行的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 4 中使用 Foundation 和 Turbolinks 时遇到问题

由于 pagesCached,Rails 4 Turbolinks 后退按钮和多个事件绑定

Rails 4 + Turbolinks + JQuery Turbolinks + Coffeescript:事件被多次触发

带有 Rails 4.2.0 的 Fotorama jQuery Gallery(Turbolinks 问题)

rails 4 turbolinks 多个绑定

带有 Turbolinks 的 Rails Bootstrap 4