2013-07-08 126 views
0

我在我的Rails應用程序中有用戶'提交'列表,並且當點擊用戶提交時,我希望完整提交加載到視圖中,而不必轉到新頁面。如何在單擊鏈接時將部分視圖加載到視圖中?

下面是提交的清單代碼:

<div id="submission-list-container"> 
    <% current_user.submissions.each do |i| %> 
     <a href='#'> 
      <div id="post-container"> 
       <%= i.title %> 
      </div> 
     </a> 
    <% end %> 
</div> 

我已經創建,<%= render "show", :submission => i %>,的部分,工作正常,但我想全部提交被加載到視圖(index.html.erb ),當上面的鏈接被點擊時。有這樣做的好方法嗎?我應該在JavaScript中做一些其他類似AJAX調用嗎?我喜歡這些部分,因爲它感覺更乾淨並且有組織地分離代碼。

我的部分是目前非常簡單:

<%= submission.title %> 
<%= dat_markdown(submission.content) %> 
+0

我想你正在尋找一個AJAX電話,是的。 – bbill

+1

該死......好吧,我猜。 –

回答

0

可以使用Dojo Toolkit中一個TitlePane做到這一點,而且很可能有一個類似小部件jQueryUI的。

我只能Dojo Toolkit的的版本說

你會做這樣的事情:

<div data-dojo-type="dijit/TitlePane" data-dojo-props="href: '/blah', title: '<%= submission.title %>', open: false"> 

可以包括這在你的應用程序佈局道場的精簡版使用量,從CDN加載:

<script data-dojo-config="async: true, parseOnLoad: true"></script> 
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.1/dojo/dojo.js"></script> 

TitlePane已連線,因此當它展開時,它會自動加載提供給href參數的內容。

雖然這不完全是一個軌道解決方案直接,它可以用作替代。

對於Rails的解決方案,你可以簡單地使用AJAX調用呈現局部的控制器。您甚至可以使用

def blah 
    @submission = Submission.find(...) 
    respond_to do |format| 
    format.html # default render 
    format.js # js behavior 
    end 
end 

然後blah.html.erb

<%= render partial: 'submission/submission', object: @submission %> 

與部分

<div id='submission-<%= submission.id %>'> 
    <div id='submission-<%= submission.id %>-title'><%= link_to(submission.title, 'blah/blah', remote: true) %></div> 
    <div id='submission-<%= submission.id %>-content'></div> 
</div> 

和blah.js.erb

把它掛
$.get('/submission/content', function(data) { $('#submission-<%= @submission.id %>-content').html(data) }); 

和進入submissions_controller與路線

def content 
    @submission = Submission.find(...) 
    render text: @submission.content 
end 

這可能不是一個確切的解決方案,但希望它會讓你在正確的道路上。

相關問題