2013-04-13 38 views
1

我有一個日曆頁面,顯示一個人整個月的例程。在頂部,我有前個月和下個月的按鈕。點擊時,我會對change_date操作進行AJAX調用,以更新日期並找到新的例程。當調用change_date.js.erb時,是否必須編寫代碼來再次更改日常操作的內容?這似乎違反了DRY。 有沒有什麼辦法可以重新使用我用來在初始加載時填充頁面的偏分量以重新填充新值的頁面?Rails:如何使用AJAX呈現網頁並保持DRY

回答

0

當然有。就像您在html模板中一樣使用render。通常,支持AJAX和普通電話的設置看起來是這樣的(當然名字似地猜測):

# controller 
def change_date 
    @dates = Date.where(:date => params[:date]) 

    respond_to do |format| 
    format.html 
    format.js 
    end 
end 

# change_date.html.erb 
<ul id="calendar"> 
    <%= render @dates %> 
</ul> 

# change_date.js.erb 
$("#calendar").html("<%= escape_javascript(render @dates) %>"); 

# _date.html.erb 
<li><%= date.date %></li> 

所以你看,你可以簡單地使用相同的部分在這兩種情形。

而只是一個建議:根據您的設置也可能是更舒適的不具有在控制器的另一種方法,而是利用show方法進行操作,其根據在這種情況下,查詢參數......

+0

確實。謝謝,我對JQuery沒有太多經驗,但似乎.html()方法也可以替換舊的內容。 – user1742188

0

我也會在第一次加載頁面的時候通過ajax加載這個人的例程。

我將它封裝在一個js函數中,並在第一次加載頁面時以及每次改變月份時調用該函數。

+0

的缺點可能是,如果有人關閉JavaScript或禁止打開它,則根本無法加載... – Vapire

+0

我同意。不一定與隱喻,但我同意:-)雖然你會驚訝有多少內聯網等被阻止使用js ... – Vapire