2013-10-02 73 views
0

我有我的home.html.haml頁面渲染3個諧音:導軌 - AJAX頁面局部更新

%h1 Foo 
#foo1 
= render partial: 'foo/foo', locals: {items: @foo1_items} 
#foo2 
= render partial: 'foo/foo', locals: {items: @foo2_items} 
#foo3 
= render partial: 'foo/foo', locals: {items: @foo3_items} 

目前,我有一個刷新這些部件分別發射一個AJAX調用到首頁的一些遠程鏈接:

= link_to 'refresh', home_path(mode: 'foo1'), remote:true 
= link_to 'refresh', home_path(mode: 'foo2'), remote:true 
= link_to 'refresh', home_path(mode: 'foo3'), remote:true 

,我有一個home.js.erb包含這樣的事情:

<% if params[:mode] == 'foo1'%> 
$('#foo1').html('<%= j(render partial: 'foo/foo', locals: {items: @foo1_items}) %>') 
<% elsif params[:mode] == 'foo2'%> 
$('#foo2').html('<%= j(render partial: 'foo/foo', locals: {items: @foo2_items}) %>') 
<% else %> 
$('#foo3').html('<%= j(render partial: 'foo/foo', locals: {items: @foo3_items}) %>') 
<% end %> 

我想知道:

  1. 如果這是默認(建議,最好的)Rails的方式做部分頁面刷新或一般處理Ajax請求的方式嗎?
  2. 如果服務器用純html做出響應並讓客戶端(javascript)做更換會更快?
  3. 你如何在你的應用程序中處理這個問題?

回答

1
  1. 是的,這是做它在Rails的正確的方式
  2. 這將是同樣的事情就處理而言。無論從服務器吐出什麼東西都會在客戶端瀏覽器上執行,並且元素會被更新。在服務器端,您可以更好地控制ERB。
  3. 就像你做過的一樣。

希望這將有助於

+0

應當指出的是,這種方式有點浪費帶寬,因爲有很多從服務器發送的數據冗餘的(每次更新將大致相同的標記用小的變化)。還有其他方式可以通過向客戶端發送較小的數據表示(例如JSON)並讓客戶端解釋它並填充標記來實現此目的。 – Slicedpan

+0

謝謝你的回答。我會等待任何人爭辯,然後我會將你的答案標記爲正確的;) –

+0

我同意@Slicedpan。你絕對可以使用一些客戶端模板系統,如把手。 – jvnill