シングルページアプリケーションを設計するための全体的なアーキテクチャを理解したかった(主にJavaScriptを使用)
ログインページ(ユーザー名/パスワード)があり、認証が成功すると、ホームページが表示されたとします。これで、ログイン画面とホームページ画面の両方が実際には1つのページの一部になるはずです。
どうすればそのようなページをデザインできますか?
シングルページアプリケーションを設計するための全体的なアーキテクチャを理解したかった(主にJavaScriptを使用)
ログインページ(ユーザー名/パスワード)があり、認証が成功すると、ホームページが表示されたとします。これで、ログイン画面とホームページ画面の両方が実際には1つのページの一部になるはずです。
どうすればそのようなページをデザインできますか?
これは非常に幅広い質問であるため、本全体を書いて詳細に答えることができます。
基本的にあなたがする必要があるのは、ページのリロードの代わりにAJAXを使用することです。ユーザーを認証するにはサーバーに接続する必要がありますが、毎回ページ全体をリロードするのではなく、サーバーに対してAJAX呼び出しを行い、ログインが成功したかどうかに応じて、コンテンツの一部を変更する必要があります。ページ上(ログインボタンを「ユーザーxxxとしてログイン」メッセージに変更するなど)。
まだご覧になっていない場合は、John Papaが、Pluralsightでのシングルページアプリケーションの設計に関する非常に人気のあるコースを用意しています 。http ://www.pluralsight.com/training/Courses/TableOfContents/single-page-apps-jumpstart
Pluralsightのサブスクリプションが必要ですが、コンテンツが自分にとって価値があることを確認するために10日間の無料トライアルを取得できます。(私はPluralsightとは提携していません。)
Web上で見つけることができる既存のソリューションからインスピレーションを得ることができます:
この無料のシングルページアプリの本を調べてみてください。「シングルページアプリ」をグーグルで検索したときに見つけました。
役立つかもしれないプロジェクトをSourceForgeに追加しました。私はこのライブラリを約1年間開発してきましたが、プライムタイムの準備ができていると思います。このプロジェクトでは、JavaScript内からasp.netMVCを参照できます。
https://sourceforge.net/projects/peachajax/
このライブラリは、AJAX操作に使用する動的JavaScriptコードを生成します。ライブラリにはjQueryが必要です。たとえば、Controller for AJAX操作内でアクションメソッドを使用する場合、次のように動的に生成されたJavaScriptファイルを介してこれにすばやくアクセスできます。
peach.ControllerName.ActionMethodName(parameter1, parameter2, parameter3); // javascript
マップされたパラメーターは、ActionMethodsパラメーターに直接関連付けられています。
カスタマイズ機能は次のとおりです。
あなたがMVCの人なら、私は個人的にバックボーンに基づくchaplinjs.orgと、シングルページアプリの栄光のためのhbsを使用しています。ロングポールの代わりにWebSocketを使用するためのいくつかの変更がありますが、それはかなり拡張可能であり、MVCに精通している場合は、簡単に入ることができます(Chaplinよりもバックボーンでより多くの問題が発生します)
以下のようなindex.htmlページが必要です
<html>
<body>
<div id="header"><!-- something cool here --></div>
<div id="login" class="view"> ... </div>
<div id="home" class="view" style="display:none;"> ... </div>
<div id="page3" class="view" style="display:none;"> ... </div>
<div id="page4" class="view" style="display:none;"> ... </div>
<div id="footer"><!-- something cool here --></div>
</body>
</html>
アプリケーションがロードされると、ログインビューを除くすべてのビュー(ビュークラスを持つdiv)が非表示(display:none)になります。ログインビューにはログインフォームが必要です。ユーザーが送信すると、ajaxリクエストが開始されます。ajaxが成功すると、アプリケーションはログインページを非表示にし、代わりにホームページを表示します。
次の方法でコードを構造化できます。モジュールごとに、モデル、ビュー、およびコントローラーファイルがあります。
たとえば、ログインモジュールの場合、loginModel.js、loginView.js、loginCtrl.jsがあります。モデルファイルで、DBに接続し、提供された資格情報を確認します。ビューでは、リスナーをコントロールにバインドします。コントローラでは、ユーザーが送信ボタンを押したときに反応します。
私は次のようにjqueryを使用して基本的なSPAを設定しました:
<script src="jquery.js"></script>
<script>
// SPA with JQuery? Hold my beer!
// Handlers
function LoadAbout(){
$("#content").load("about.txt");
$("#page").html("About");
}
function LoadHome(){
$("#content").load("home.txt");
$("#page").html("Home");
}
// Run on document ready
$(document).ready(function() {
// load the home page
LoadHome();
// Assign nav handlers
$("#about").click(LoadAbout);
$("#home").click(LoadHome);
});
</script>
モジュール内の要素にハンドラーをアタッチする必要がある場合は、次のようにnavハンドラー内にアタッチできます。
function LoadAbout(){
$("#content").load("about.txt", function(){
$("#contactusbutton").click(ContactUsClick);
});
$("#page").html("About");
}
I<3コールバック