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| %>
我遇到了同样的问题,如果你想保持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元素body
或document
,然后指定要监听的动态元素的选择器:
$('body').on('click', '.remove_line_items', function(e) { ... });
( 更多 细节 )