2011-04-04 70 views
1

簡單的JavaScript和傳遞參數我已經看過有關不顯眼的JavaScript railscasts並閱讀大量教程,而是在Rails3中不顯眼的JavaScript的兩件事情還是讓我困惑:使用與Rails3中和UJS

  1. 終點爲簡單的JavaScript(隱藏一些元素,添加CSS類,...)
  2. 參數傳遞給JS

讓我與示例代碼澄清這一點。我想讓它淡出一些元素ID爲「樣本」的鏈接:

link_to 'Fade sample', url, :remote => true 

應該是什麼網址,以便它可以執行JS?它應該是在一個名爲例如「JavaScript的」,因此可以在javascript.js.erb訪問JS控制器新動作包含:

$('#sample').fadeOut(); 

此外,關於UJS的第二個問題與傳遞參數相關的JS(超時,對於這個例子)。我可以寫:

link_to 'Fade sample', url, :data-timeout => 1500, :remote => true 

但不知道如何訪問JavaScript中的數據超時。

我使用的是Rails 3.0.5,JQuery 1.5.2和jquery-ujs。

回答

1

我會盡量一一回答。

  1. url in link_to。這將是應用程序中任何資源的網址哈希值。假設你在routes.rb中指定了resources :foos,它將爲CRUD操作創建6個URL。您可以通過如new_foo_url,foo_url(@foo)foos_url等方法將這些傳遞到網址。即使您可以像{:controller=>:foos_controller, :action=>:index}那樣手動傳遞哈希,您也可以將多個參數傳遞給哈希,如{:controller=>:foos_controller, :action=>:index, :param1=>"value1", :param2=>"value2"}。你也可以通過字符串網址像foos/new,foos/1

  2. 你可以很容易地訪問jQuery自定義標籤屬性。例如你想訪問與id="link"錨,你可以$('#link').attr("data-timeout")。如果你不知道什麼是id,但你知道它有一個屬性,你可以撥打$("a[data-timeout]").first().attr('data-timeout')

+0

謝謝你的回答。關於第一個答案,我可以理解url,但是我不知道當我想指定不是某個資源時,應該使用什麼url,但是javascript。它應該是一些新的行動在控制器命名爲例如'顯示'在這種情況下JavaScript文件應位於shows.js.erb? 在這個例子中,我不需要獲取一些資源,我只是想執行簡單的JavaScript代碼。 – h00s 2011-04-04 09:19:21

+0

您可以在'routes.rb'文件'match'中取消註釋最後一行:controller(/:action(/:id(。:format)))''。之後,您可以在控制器中定義任何方法,可以在link_to中使用它。正如你所說的函​​數'something',你可以用散列'{:controller =>:some_controller,:action =>:something}'傳遞它。 – 2011-04-04 09:29:30

+0

我會建議如果你有很多js在你的應用程序中處理,你必須爲它定義一個單一的函數,並將params傳遞給它。例如我會在控制器中定義一個動作js_handler。現在我給了散列'{:controller =>:my_controller,:action => js_handler,:what_to_do =>'task1'}'並且在你的方法中你可以使用這些參數來執行不同的動作。 – 2011-04-04 09:32:05