【问题标题】:CoffeScript works only after page reload in Rails appCoffeeScript 仅在 Rails 应用程序中的页面重新加载后才有效
【发布时间】:2015-03-12 01:51:01
【问题描述】:

我有两个选择,第二个根据第一个的值变化。我使用 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:

&lt;%= link_to "link", new_request_path %&gt;

【问题讨论】:

    标签: javascript jquery ruby-on-rails coffeescript


    【解决方案1】:

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

    你有几个选择来处理它。

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

    2. 将整个javascript_tag 调用移动到body 的底部。

    3. 使用jquery-turbolinks gem。

    【讨论】:

    • 第二个选项有帮助。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2013-09-23
    • 2013-06-23
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多