0

したがって、2 つの異なるナビゲーション ヘッダーを持つ Rails アプリケーションがあります。1 つは大部分のページで使用され、もう 1 つは少数のページでのみ使用されるナビゲーション ヘッダーです。さらに、ナビゲーションは application.html.erb ページ (アプリケーションのすべてのページ間で共有) に読み込まれるため、ユーザーがページを更新しない限り、ナビゲーション html がサーバーから更新されることはありません。また、各ページは (pjax を使用して) ajax を介して読み込まれるため、異なるナビゲーション ヘッダーを必要とする 2 つのページ間を移動しても、ナビゲーション ヘッダーは更新されません。

可能な解決策がいくつかありますが、持っているすべてのビューにコードを追加する必要がないので、それらは好きではありません。主な解決策は、ナビゲーション ヘッダーを (グローバルな application.html.erb ではなく) ビューに移動するか、すべてのページに JavaScript を追加して、ナビゲーションが正しいものであることを確認し、そうでない場合はそれを置き換えることです。しかし、それを置き換えるために、部分的でモデルからのデータを含むhtmlをロードする方法がわかりません。

注: 各 URL に直接アクセスしても問題ありません。

これはかなり一般的な問題であると思われるため、簡単なアプローチが欠けているように感じますが、検索中に何も見つかりません。

編集:そして私はjqueryを使用しています

4

3 に答える 3

1

ナビゲーションは 2 つしかないため、両方をレイアウトに生成して非表示にします。

<div id="nav">
  <div id="nav1" class="nav" style="display: none"><a href="#">Nav1</a></div>
  <div id="nav2" class="nav" style="display: none"><a href="#">Nav2</a></div>
</div>

ページの JS で、必要なものを表示する関数を作成します。pjax 経由でページを更新する場合、実行する JS を渡して、必要な JS で chooseNav を呼び出す必要があります。

<script type="text/javascript">
  function chooseNav(sel) {
    $('#nav .nav').hide();
    $('#nav' + sel).show();
  }

  $(function() {
    chooseNav(1);  // Default nav to load when page loads
  });
</script>
于 2012-08-07T03:21:42.897 に答える
0

ナビゲーションを適切なパーシャルに置き換えたい場合は、AJAX応答に次のように配置できます(jqueryを使用していると仮定)。

$('#navigation').html('<%= escape_javascript(render 'partial') %>');
于 2012-08-01T00:28:53.917 に答える