繁体   English   中英

仅当在Rails应用程序中重新加载页面后,CoffeScript才能工作

[英]CoffeScript works only after page reload in Rails app

我有两个选择,第二个根据第一个的值更改。 我使用CoffeScript。

  <%= f.collection_select :type, RequestType.order(:typeName), :id, :typeName, {include_blank:true }, {:class => "types"} %> <%= f.grouped_collection_select :subtype, RequestType.order(:typeName), :RequestSubTypes, :typeName, :request_type_id, :subTypeName, {include_blank:true}, {:class => "subTypes" } %> 
当select 1更改时,第二个选项中的选项会重新加载(第二个选择中的选项取决于第一个选择中的选项。这是我的CoffeScript代码:

 jQuery -> subTypes = $(".subTypes").html() $(".subTypes").parent().hide() $(".types").change -> type = $(".types :selected").text() options = $(subTypes).filter("optgroup[label='#{type}']").html() if options $(".subTypes").html(options) $(".subTypes").parent().show() else $(".subTypes").empty() $(".subTypes").parent().hide() 
它有效,但仅在我重新加载页面之后。 如果我从一般的link_to访问页面,似乎CoffeScript无法正常工作。 因此,当导航到该页面时,我总是必须重新加载该页面。 使用link_to导航到页面看起来像ajax,但是我没有使用ajax。 这是我的link_to:

 <%= link_to "link", new_request_path %> 

我相信您正在使用turbolinks 这样,您的jquery引导程序将在您最初访问的页面上执行一次,并且不会与其他页面的DOM挂钩,因此您的回调不会赶上。

您有几个选择来处理它。

  1. 在布局data-turbolinks-track='false'javascript_tag上使用属性data-turbolinks-track='false' 这样,js文件将与正文一起在每次页面加载时加载并执行。

  2. 将整个javascript_tag调用移至您的body底部。

  3. 使用jquery-turbolinks gem。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM