2012-09-12 26 views
3

我正在使用Ruby on Rails 3.2.2和jQuery-Rails 2.0.2 gem(包括jQuery UI)。我有一個jQuery UI Dialog窗口,當我點擊前端內容中的「新評論」鏈接時,該窗口已打開。當對話窗口打開時,它會對我的控制器操作執行一個AJAX HTTP請求,使其能夠使用HTML表單呈現和「填充」模式窗體主體內容。如何在從對話框窗口成功提交表單之後更新前端內容?

我想實現我的視圖,這樣表單成功提交後前端內容改變了這種方式:觸發鏈接文本從「新評論」改爲「編輯評論」。

我該如何做到這一點?你有什麼建議?


:表單被依次通過執行AJAX HTTP請求提交。

回答

0

這一切都取決於你如何提交表單到服務器。

如果您在提交表格已設定的:remote => true屬性將通過一個AJAX調用發送到服務器,服務器將能夠執行從一個普通的非Ajax形式的請求區別開來:

respond_to do |format| 
    format.js #this renders the <actionname>.js.erb file and executes it on the client 
end 

jquery_ujs幫助程序將執行服務器返回給他的JavaScript代碼。

你可以只寫在你的<actionname>.js.erb文件任意JavaScript代碼可能看起來是這樣的:

$('#trigger_link').text('edit comment'); 

如果您在使用遙控形式,而是做一個正常的$.ajax叫你可以簡單地鉤到success jQuery提供的回調函數,但我想這很明顯。

更新:

好像問題是,你不知道什麼是鏈接觸發的對話框開幕。

通常在某處你有一個jQuery函數來爲你打開對話框。當渲染包含觸發鏈接的初始列表時,我假設你有一些方法可以將它們與頁面上的其他鏈接區分開來(可能通過類似.trigger的css類)。

你可以再做:

$('.trigger').click(function() { 
    window.trigger_link = this; 
}); 

需要注意的是這個小片段上方不會覆蓋打開彈出現有的單擊事件處理程序。它也被執行。

所以現在我們跟蹤打開窗口的鏈接(窗口打開時點擊觸發鏈接 - 我們總是保存最後點擊的觸發鏈接),我們可以在提交表單後執行以下操作:

$(window.trigger_link).text('edit comment'); 

由於window.trigger_link引用了正確的鏈接。

+0

我的問題是關於*「檢索」*/*「建設」*觸發鏈接(在你的答案,例如,你命名'trigger_link')適當的CSS'ID'因爲:(1) AJAX呈現的表單與其自己的CSS「id」相關(AJAX請求由另一個控制器操作處理,它已經設置了自己的CSS'id's); (2)我在同一頁面中有很多觸發鏈接,每個鏈接都設置了自己的CSS'id'。 – Backo

+0

換句話說,我*不能「直接知道」*(因此我無法正確地「建立」)來自/在「 .js.erb」模板中的觸發器鏈接的CSS id(也許,有一些*常見*方式 - 我不知道 - 爲了解決這個問題...)。 – Backo

+0

您可以通過'$('form submit')。text()'..來訪問按鈕,並且容納表單的容器也應該是已知的。所以'$('form submit',$('#containerId'))。text()'應該可以工作 – Tigraine