2012-08-31 61 views
0

在Rails 3,假設我有以下代碼:如何Rails的AJAX輔助工作

控制器

... 
format.js # create.js.erb 
... 

create.js.erb

$('#element').html("new content"); 

查看錶格

... 
button_to 'Create', element, remote: true 

我在想如何調用create.js.erb文件中的JS。 我的猜測是它返回JS代碼,並且一些Rails助手在收到它時調用它。這是正確的嗎?還是在這裏發生了其他類型的魔法?

+0

這取決於客戶端如何發送請求。控制器根據HTML/JS/XML請求相應地呈現視圖。 http://api.rubyonrails.org/classes/ActionController/MimeResponds/ClassMethods.html#method-i-respond_to – Bongs

+0

我對JS部分感興趣,正如你可以從我的帖子中看到的那樣。 –

回答

1

編輯

簡短的回答:基本上,你的假設是正確的,它將返回然後將要執行的JS代碼。

稍長的答案:雖然有一些魔法。 單擊該按鈕時,它將向創建url發出JSON請求,但請求格式「js」。

然後控制器知道預期的格式是'js',並且在運行create動作後,將呈現該格式的模板 - create.js.erb

Rails知道它應該執行此自定義JSON請求,因爲該選項爲:remote => true。它將一個data-remote=true屬性添加到鏈接元素。

然後,將使用此數據屬性的每個元素附加一個在rails.jslink)中指定的處理程序,該處理程序負責處理其餘部分。下面

Rails的

原來的答覆使用一種稱爲非侵入式JavaScript給你.js文件指定的處理程序連接到各自的事件的技術。

您可以在this(更具體地說是第3部分)和this文章中閱讀更多關於它的內容。

或者,你可以採取的最有趣的路線,並採取一看rails.js文件中看到所有的魔法是如何工作的:)

+0

對。我編輯了一個更清晰的答案。那更符合你的喜好嗎? – vitorbal

+0

正如你所看到的。謝謝! –