2012-03-22 91 views
0

我試圖解決書中的「Rails 3 in Action」,其中作者使用下面的代碼來添加使用ajax生成新文件字段的鏈接。我有理解困難的是如何工作的,什麼是等效的JavaScript(或jQuery的),它可以在功能上等同於更好地理解它:瞭解jQuery Rails Gem和rails.js

<%= link_to "Add another file", new_file_path, 
    :remote => true, 
    :update => "files", 
    :position => "after" 
%> 

非常感謝

回答

0

嗯,我不當然,如果我們能夠比這本書更好地解釋它。你有哪些麻煩?

您的代碼將變成'a'鏈接,其中的href將作爲new_file_path的URL(可能是文件控制器中的新方法)。您可以通過在rails控制檯中通過鍵入app.new_file_path

來調用此方法來檢查此路徑。'remote'參數將導致數據遠程參數指向值爲true的'a'元素,這意味着它將是阿賈克斯呼籲。當頁面加載時,rails.js將查找遠程參數,並因此將單擊事件綁定到ajax調用。

ajax調用返回時更新的位置將成爲頁面上的'文件'元素。

position參數指示 - 不要直接更新文件元素,而是將響應放在該元素之後的DOM中。

如果不幫助嘗試這些資源:

http://guides.rubyonrails.org/ajax_on_rails.html

http://net.tutsplus.com/tutorials/javascript-ajax/using-unobtrusive-javascript-and-ajax-with-rails-3/

0

我很困惑與例子,因爲它是不正確的,沒有任何使用Rails 3。相反,作者使用link_to_remote中有些奇怪的語法,這在Rails 3中不再支持。

此幫助程序將生成以下鏈接:

<a update="files" position="after" data-remote="true" href="/files/new">Add another file</a> 

簡單地觸發一個AJAX GET請求到/files/new URL(因爲jquery-ujs觀察與data-remote="true"鏈接的點擊,併產生這樣的請求)。它不會向服務器發送任何附加參數(既不是update也不是position)。隨後的DOM操作完全取決於您在服務器上生成的響應。如果你想與服務器通信(這些可能在客戶端事件處理程序中使用,但並不是書中所說的,正如我所理解的那樣),那麼這些選項是完全沒用的。

+0

我很困惑你的答案。 'link_to'(如示例中所示)不生成內聯js。因此它與UJS有關。 'link_to_remote'產生內聯,因而造成突然,js(這就是爲什麼它被棄用)。等於兩者是不正確的。 – 2012-03-22 16:55:37

+0

@Ken你是對的UJS。上述書中的[那些話](http://pastebin.com/5Xti23qG)讓我寫下了這些。我已經更正了答案,以便更清楚。 – 2012-03-22 18:57:48