Rails 4 TurboLinks和jQuery动态链接不好玩

我正在开发Rails 4.0中的一个应用程序,我遇到的问题是turbolinks与我的一些jQuery代码不一致。 我有一个Quote模型,它有一个相关的QuoteItems模型。 我使用accepts_nested_attributes_for和一些jQuery来填充订单项表单。

当我点击链接将我带到new_quote_path时,动态链接不会触发javascript代码。 当我刷新页面时,表单工作很棒。 我喜欢turbolinks,因为它超级快,但不知道如何让它在开发中工作。 这是一些代码。

在quotes.js.coffee中

jQuery -> $('form').on 'click', '.remove_line_items', (event) -> $(this).prev('input[type=hidden]').val('1') $(this).closest('fieldset').hide() event.preventDefault() $('form').on 'click', '.add_fields', (event) -> time = new Date().getTime() regexp = new RegExp($(this).data('id'), 'g') $(this).before($(this).data('fields').replace(regexp, time)) event.preventDefault() 

报价查看new.html.erb

  "hello" do |f| %> 





"Select Customer") %>

builder %>

我遇到了同样的问题,如果你想保持turbolink工作和你的动态jquery,试试这个gem: jquery-turbolinks

希望能帮助到你

一些选择:

1)关闭turbolinks – 请参阅http://blog.steveklabnik.com/posts/2013-06-25-removing-turbolinks-from-rails-4

2)使用新page:load turbolinks触发的事件 – $(document).on('page:load', your_start_function); ,请参阅Rails Jquery在其他页面上不起作用 – 猜测你的情况会是这样的

 $(document).on 'page:load' -> $('form').on 'click', '.remove_line_items', (event) -> $(this).prev('input[type=hidden]').val('1') $(this).closest('fieldset').hide() event.preventDefault() 

也许它会有所帮助:

 $(document).on "turbolinks:load", -> $('#some_element_id').click -> alert "Clicked!" 

Turbo链接使用AJAX,这意味着任何动态生成的元素都不会分配它们的就绪事件(因为在第一次加载后技术上不加载页面)。 相反,您需要侦听顶部DOM元素bodydocument ,然后指定要监听的动态元素的选择器:

$('body').on('click', '.remove_line_items', function(e) { ... });

( 更多 细节 )