只有在Rails应用程序中重新加载页面后,CoffeeScript才能运行

时间:2015-03-11 17:11:50

标签: javascript jquery ruby-on-rails coffeescript

我有两个选择,第二个选择根据第一个选择的值而改变。我使用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" }  %>
&#13;
&#13;
&#13; 当选择1更改时,第二个选项中的选项将重新加载(第二个选项中的选项取决于第一个选项中选择的选项)。 这是我的CoffeScript代码:

&#13;
&#13;
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()
&#13;
&#13;
&#13; 它工作,但只有在我重新加载页面后。如果我从一般link_to访问页面,似乎CoffeScript无法正常工作。因此,当导航到该页面时,我总是必须重新加载页面。使用link_to导航到页面看起来像ajax,但我没有使用ajax。 这是我的link_to:

&#13;
&#13;
<%= link_to "link", new_request_path %>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:5)

我相信您正在使用turbolinks。这是你的jquery引导程序在你最初访问的页面上执行一次的方式,并没有与其他页面的DOM挂钩,因为你的回调没有赶上。

你有几个选择来处理它。

  1. 在布局主管中的data-turbolinks-track='false'上使用属性javascript_tag。这样,js文件将在每个页面加载时与主体一起加载和执行。

  2. 将整个javascript_tag来电移至body的底部。

  3. 使用jquery-turbolinks gem。