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) %>
4

1 に答える 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 からロードされた dojo の軽量使用のために、アプリケーション レイアウトにこれを含めることができます。

<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) } );

および route を使用した submits_controller へのエントリ

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

これはおそらく正確な解決策ではありませんが、うまくいけば、正しい道を歩むことができます.

于 2013-07-09T02:12:00.433 に答える