2014-01-09 47 views
1

我正在製作一個債務管理應用程序,我在我的控制器中有@opened_debts@all_debts(已打開和退回的債務)。使用AJAX更新頁面鏈接點擊

默認情況下,我只在頁面上加載@opened_debts。但我也有鏈接顯示所有的債務在一個頁面上。

<a href="#" id="show_all_debts">Show all debts</a> 

我想頁面,點擊該鏈接後重新裝入debts_div@all_debts

如果我做一個<script>標籤與click event在頁面的底部,

$('#debts_div).replaceWith('<%= j render @all_debts %>'); 

的Rails實際上加載它使所有的債務,使他們對用戶不可見的,直到他點擊鏈接。但是,它使所有這個巨大的腳本加載頁面變得更慢。

我可以加載此列表而無需在頁面上呈現它,直到用戶單擊鏈接?

在此先感謝!

回答

2

使用rails_ujs

<%= link_to "Show all depts", model_path(), :remote => true %> 

那麼你的請求將作爲阿賈克斯發送。創建JS視圖與

_index.html

<div>some code</div> 

內index.html.erb使幹

<%= render :partial => 'index.html' %> 

index.js.erb的,使幹

$('#debts_div).replaceWith('<%= j(render :partial => 'index', :format => :html) %>'); 

應該工作

+0

太棒了!有用。謝謝!還有一個問題:現在我在'index.html.erb'文件中'@ opened_debts'默認打開並且在'index.js.erb'文件'@ all_debts'中打開。我如何通過ajax再次加載'@ opened_debts'?我如何通過鏈接觸發我想要渲染的變量?謝謝! –

+1

創建一個'_index.html'部分,你可以在'index.html.erb'和'index.js.erb'中使用它。我已經延長了答案。見下文 – devanand