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

标签 javascript jquery ruby-on-rails-4 turbolinks jquery-tokeninput

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

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

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

enter image description here 查看页面

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

我的 CoffeeScript

$(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')

最佳答案

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

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

您的语法也可能与 $(document).on "ready page:load" 有点不一样。已有other reports readypage 之间缺少逗号时出现的问题。

关于除非使用 turbolinks 和 rails 4 重新加载页面,否则不会执行 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23212898/

相关文章:

javascript - 带有 overflow hidden 的 jquery-ui 可排序连接列表

javascript - jQuery onClick 适用于前两次点击,但此后停止

javascript - Angular 动画

javascript - 正则表达式数字与单个小数

ruby-on-rails - 为什么我的 Heroku 应用程序不使用 Sendgrid 发送电子邮件?

ruby-on-rails-4 - 带有多个 list 文件的 Rails 4 Assets 预编译

heroku - Gem::LoadError: 为数据库适配器指定了 'postgresql',但 gem 未加载。将 `gem ' pg'` 添加到您的 Gemfile

javascript - KnockOut 无法解析绑定(bind)。引用错误

Javascript 将 HTML 页面加载到新窗口并打印

javascript - 这个简单的片段(将字符串解析为数组)有什么问题?