2010-04-11 43 views
0

我的主要目的是讓功能獨立於Javascript,使其具有優雅的可降解性。也許我想要去的地方我想錯了的方式,但其主要思想是:如何在Rails中同時渲染部分文件和JavaScript文件?

  • 有一些jQuery UI的選項卡,當用戶按下一個鏈接,一個新的選項卡中添加相應的行動
$("#tabs").tabs('add', "/groups", "My Groups"); 
  • 控制器識別AJAX請求並呈現僅部分該標籤
if request.xhr? 
    render :partial => "index_tab" 
end 
  • 在這一點上,我想與/groups/index動作相關的JavaScript文件被執行爲好,這意味着index.js.erb的文件組文件夾。
  • 由於「只有一個渲染」規則,我想不出一個很好的方式來做到這一點,我需要一個快速的解決方案。

謝謝您的任何建議。

回答

0

動態加載JS可以引入我認爲經常最好避免的各種複雜性。我認爲最好在頁面加載時將所有JS一次加載到單個文件中 - 這樣您就可以獲得一個簡化的腳本請求,從而有助於緩存和性能。

創建選項卡然後可以觸發相應的代碼處理。您可以開始用偵聽器將其包含到事件模型中(因此代碼偵聽要添加的正確類型的選項卡),或者您可以在ajax請求加載成功完成後簡單地調用函數。

+0

謝謝...嗯,我想把它放在一起是一個確定的解決方案。但在這一點上,我已經爲每個控制器的每個動作分開了js文件,並且我希望能夠保持這種狀態。 – master2004 2010-04-11 02:30:22

+0

我也是這樣做的,並使用優秀的asset_packager打包它們。您仍然可以將它們單獨包含在您的模板中進行開發。 – 2010-04-11 02:57:28

1

你可以這樣做,你可以用你的createedit視圖顯示與部分相同的表單。

_tab.html.erb
<div class="tab" id="<%= tab.id %>"> 
    <p>whatever</p> 
</div> 
show.html.erb
<%= render 'tab', :tab => TabObject %> 
show.js.erb
$('#tabs.').... 
$('something').append("<%= escape_javascript(render('tab', :tab => TabObject)"); 

如果你請求與jQuery的script數據類型的頁面,你真的應該有相應的因爲雖然rails會在它的位置呈現html視圖,但jQuery會將它們放入一個<script>標記中,該標記不應該包含html。