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

时间:2014-04-22 07:12:53

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

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

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

它没有触发预加载功能,你如何解决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')

1 个答案:

答案 0 :(得分:1)

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

由于Rails 4中的Turbolinks,

$(document).on 'ready, page:change'经常被用作替换$(document).ready页面上没有完全重新加载的页面。我想如果你切换到那个问题就应该消失了。

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