コントローラーは JSON を返すことができます (ただし、何らかのテンプレート (以下で説明します) を値だけで埋める機能が必要です。または、コントローラーで html を返し、必要なページの一部を JavaScript で置き換える必要があります。
あなたのhtmlでは、次のようなことができます:
<div id='loader'>Loading...</div>
<div id='popup'>This will be replaced</div>
<header></header>
<nav></nav>
<secton id='content'></section>
<footer></footer>
CSS で次の 2 つの div を必ず非表示にしてください。div#loader, div#popup { display: none; }
ローダーの をポップアップのz-index
より小さく設定します。z-index
タグにプロパティを設定して、a
それぞれがポップアップを開くかどうかを指定します。
<a href='your/url' data-pops>Click me</a>
これらすべてのアンカー クリック イベントを関数にバインドして、これを処理します。
$('a[href]').click(function() {
var self = this;
var url = $(self).attr('href');
if($(self).attr('data-pops')) {
showPopup(url);
} else {
loadContentPartial(url);
}
});
data-pops
属性が存在する場合showPopup
、アンカーから指定された URL で関数が呼び出されます。それ以外の場合は、ここで名前が付けられた関数の呼び出しが実行されloadContentPartial
、コンテンツを更新できます。
関数showPopup
は次のタスクを実行できます。
- ローダーを表示します。
- を実行し
$.get
ます。
- get が json のみを返す場合 (mvvm フレームワークである knockoutjs を使用することをお勧めします)
- get が未加工の html を返す場合: get が完了したら、ポップアップ div のコンテンツを から返されたコンテンツに置き換え
$.get
ます。
- ローダーを非表示にしてポップアップを表示しないでください。(ポップアップがその上にあるため、ローダーの画像/アイコン/テキストは表示されません - ユーザーの操作を避けるために灰色のオーバーレイを維持します)
関数は、show popuploadContentPartial
とほぼ同じタスクを実行する必要がありますが、セクションのコンテンツを置き換えてからローダーを非表示にする必要があります。
ここでちょっとしたチートに注意してください。ページ全体のリクエストを実行できます。ここで返されたコンテンツを現在のページ コンテンツに置き換えます。リクエストは少し大きくなりますが、最近では 30k または 10k を返すことはそれほど重要ではありません。もちろん、Facebookではありません。
今:コントローラーから html を作成するか、フォーム、ボタン、フィールド、および必要なすべてのものを使用して、返される生の html を生成するヘルパー メソッドを作成することをお勧めします。ノックアウト js の使用を選択した場合は、いくつかのチュートリアルがあります。NDC (Norwegian Developer Conference) で Brad Wilson によって記録された、私にとって最高のチュートリアルは次のとおりです。使用、学習、実装が非常に簡単です。私はそれを使用したことはありませんが、ここにリンクがあります。K Scott Allen は、ASP.NET MVC4 FundamentalsHandlebarsjs
と呼ばれるPluralsightで (いつものように) 素晴らしいチュートリアルを持っています。
万が一、ポップアップ用のローダーが必要な場合は、次のいずれかを実行できます。
- オーバーレイされたローダーの を変更
z-index
し、ポップアップの処理が終了したら元に戻します。
- などの別のオーバーレイ ローダーを作成し、より高い
div#popupLoader
を設定します。z-index
div#popup