アプリケーションを WebApi + Knockout の世界に持ち込むために必要なパターンに関して、いくつかの問題があります。次のシナリオは少しスローされています。
非常に基本的なグリッド部分ビュー (_grid.cshtml) があります。QueryID のみを持つ GridViewModel を使用します。Grid パーシャルは、(ko ViewModel で定義されている) Ajax を使用して QueryID を、JSON でオブジェクトのコレクションを返す WebApi メソッドに渡します。次に、ノックアウトを使用して、返された JSON に基づいてグリッドの列をバインドし、行を読み込みます。
これはすべて正常に機能しますが、これが正しいアプローチであるかどうかはわかりません。
// When the query is changed update the grid data.
self.selectedQueryID.subscribe(function (newQuery) {
self.SelectQuery(newQuery.ID());
});
// Execute the query and set the results as the rows of the table
self.SelectQuery = function (queryID) {
$.ajax({
url: '/api/Query/Execute?ID=' + queryID,
type: 'POST',
contenttype: 'application/json',
success: function (result) {
self.gridData(result);
}
});
};
複雑なのは、ユーザーが選択できる利用可能なクエリのリストである別の部分ビューがある場合です。この部分的なビューは、グリッドの部分的なビューに隣接しています。クリックしたクエリをグリッドに送信して、別の ajax リクエストを送信して新しいクエリのデータを取得できるようにしたいと考えています。これが MVC アプリケーションについて考えるのは完全に間違った方法であることはわかっていますが、WebApi については十分に知りません。
@Html.Partial("~/Views/Shared/_Grid.cshtml", Model.GridViewModel)
@Html.Partial("~/Views/Shared/_Queries.cshtml", Model.User)
これはすべて、グリッドに何らかのデフォルト クエリを実装し、ユーザーが他のクエリを選択できるようにするためのものです。
Backbone と Knockback についても調べ始めましたが、これが正しい方向であるかどうかはわかりません (十分に理解できていません)。