このセクションでは、HTML、JavaScript、 およびKnockout.js ライブラリを使用して、アプリケーションのクライアントを作成します。 クライアント アプリを段階的にビルドします。
- 書籍の一覧を表示しています。
- 書籍の詳細を表示しています。
- 新しい書籍を追加する。
Knockout ライブラリでは、Model-View-ViewModel (MVVM) パターンを使用します。
- このモデルは、ビジネス ドメイン内のデータ (ここでは書籍や著者) のサーバー側表現です。
- ビューはプレゼンテーション レイヤー (HTML) です。
- ビュー モデルは、モデルを保持する JavaScript オブジェクトです。 ビュー モデルは、UI のコード抽象化です。 HTML 表現に関する知識がありません。 代わりに、"書籍の一覧" など、ビューの抽象的な特徴を表します。
ビューは、ビュー モデルにデータ バインドされます。 ビュー モデルの更新は、ビューに自動的に反映されます。 ビュー モデルでは、ボタンのクリックなどのイベントもビューから取得されます。
この方法では、コードを書き直すことなくバインディングを変更できるため、アプリのレイアウトと UI を簡単に変更できます。 たとえば、項目の一覧を <ul>として表示し、後でテーブルに変更できます。
ノックアウト ライブラリを追加する
Visual Studio の [ツール ] メニューから、[ NuGet パッケージ マネージャー] を選択します。 次に、[ パッケージ マネージャー コンソール] を選択します。 [パッケージ マネージャー コンソール] ウィンドウで、次のコマンドを入力します。
Install-Package knockoutjs
このコマンドは、Knockout ファイルを Scripts フォルダーに追加します。
ビュー モデルを作成する
app.js という名前の JavaScript ファイルを Scripts フォルダーに追加します。 (ソリューション エクスプローラーで、[スクリプト] フォルダーを右クリックし、[ 追加] を選択し、[ JavaScript ファイル] を選択します)。次のコードを貼り付けます。
var ViewModel = function () {
var self = this;
self.books = ko.observableArray();
self.error = ko.observable();
var booksUri = '/api/books/';
function ajaxHelper(uri, method, data) {
self.error(''); // Clear error message
return $.ajax({
type: method,
url: uri,
dataType: 'json',
contentType: 'application/json',
data: data ? JSON.stringify(data) : null
}).fail(function (jqXHR, textStatus, errorThrown) {
self.error(errorThrown);
});
}
function getAllBooks() {
ajaxHelper(booksUri, 'GET').done(function (data) {
self.books(data);
});
}
// Fetch the initial data.
getAllBooks();
};
ko.applyBindings(new ViewModel());
Knockout では、 observable クラスによってデータ バインディングが有効になります。 監視対象の内容が変更されると、その観察可能オブジェクトはすべてのデータバインドされたコントロールに通知し、コントロール自体が更新されるようにします。 ( observableArray クラスは 、observable の配列バージョンです)。まず、ビュー モデルには 2 つの監視可能なデータがあります。
-
booksは書籍のリストを保持します。 -
errorには、AJAX 呼び出しが失敗した場合のエラー メッセージが含まれています。
getAllBooks メソッドは、書籍の一覧を取得するために AJAX 呼び出しを行います。 次に、結果を books 配列にプッシュします。
ko.applyBindingsメソッドは、Knockout ライブラリの一部です。 ビュー モデルをパラメーターとして受け取り、データ バインディングを設定します。
スクリプト バンドルを追加する
バンドルは、ASP.NET 4.5 の機能で、複数のファイルを 1 つのファイルに簡単に結合またはバンドルできます。 バンドルすると、サーバーへの要求の数が減り、ページの読み込み時間が短縮されます。
ファイル App_Start/BundleConfig.csを開きます。 RegisterBundles メソッドに次のコードを追加します。
public static void RegisterBundles(BundleCollection bundles)
{
// ...
// New code:
bundles.Add(new ScriptBundle("~/bundles/app").Include(
"~/Scripts/knockout-{version}.js",
"~/Scripts/app.js"));
}