1

最も基本的なレベルで、左側と右側のパネルの 2 つのパネルで構成される Ruby on Rails アプリケーションがあります。私が望むのは、これをレイアウトとして使用し、コントローラーで のようにレンダリングできるようにすることrender <view_name>, <right or left panel>です。これにより、ターボリンクと組み合わせて、左側または右側のパネルのみが動的に作成されます。

インターネットを検索しましたが、私のような例は見つかりませんでした。これは実行可能だと確信していますが、どうすればよいですか?
編集: Android の chrome で実行できるはずです。1 つの解決策は、最初のリクエストですべてのビューをレンダリングすることです。リンクをクリックすると、パネルが非表示になり、表示されますが、これは問題ないと思います。ご意見はありますか? ここに画像の説明を入力

4

3 に答える 3

1

残念ながら、これはターボリンクでは不可能であり、pjax 自体でも不可能です (いわゆる pjax コンテナーを複数持つため)。

Turbolinks は常に body 要素全体のコンテンツを置き換えます。Pjax は常に要素の内容をpjax-containerdata 属性に置き換えます。

もちろんやり方はあります。クライアント側の JavaScript フレームワークを捨てることで、ajax リクエストを実行してjsレスポンスを返すことができます。

私の頭の上から、次のようなビューを表示できます。

index.html.erb

<%= link_to 'Show', show_path, remote: true %>

コントローラ

def show
  # Do the work, fetch data from database etc.

  # Keeping both formats ensures that when you hit the url directly 
  # the whole page gets rendered as usual (show.html.erb), 
  # when the request is an ajax request using the view snipper above just
  # the javascript for replacing the content of a single panel is rendered (show.js.erb)
  #
  # Rails is smart enough so it should not be required to include the respond_to block
  # in the controller, Rails automagically chooses an appropriate response format
  # based on the request, you only need to have the views in place,
  # but I keep it here so you get a picture.
  respond_to do |format|
    format.html
    format.js
  end

show.js.erb

$('.right-panel').html('<%= j render partial: "something" %>')
于 2013-10-22T07:55:38.103 に答える
0

いくつかの調査の後、私は次の結論に達しました。

私がやろうとしていたことは、いくつかの制限を設定しない限り不可能です。

閲覧履歴に保存されている「アクション」をレンダリングできるのは、2 つのパネルのうちの 1 つだけです。両方のパネルが閲覧履歴に保存されているアクションをレンダリングする場合、ナビゲーションが期待どおりに機能しない可能性が高くなります。

これを念頭に置いて、実際に必要なのは、左側のパネルでナビゲーション対応アクションをレンダリングし、右側のパネルで他のものをレンダリングすることであることに気付きました (私はそれらをユーティリティと呼びます)。たとえば、このようなパネルでレンダリングする 1 つのことは、Chat-Panel です。これは、Facebook がチャットでどのように機能するかです。

したがって、基本的には、標準のターボリンクを使用して、閲覧履歴を保存するリクエストや、「Utils」パネルの pjax などを処理できます。唯一の問題は、応答として小さな html を送信した場合でも、Turbolinks がページ全体を完全にレンダリングすることです。

これを解決するために、ターボリンクと pjax の完璧な組み合わせである wiselinks を使用することになりました。また、pjax とは異なり、wiselinks はフォームを処理することもできます。

于 2013-12-05T21:03:08.603 に答える