1

リソースに関するさまざまな情報を取得するには、複数のWebサービスを呼び出す必要があります。たとえば、マルチテナントアプリに対して次のような呼び出しがある場合があります。

  1. 場所を取得
  2. GETロケーション/{id}/サーバー
  3. 場所/{id}/テナントを取得

これらの呼び出しのそれぞれで、対応するWebサービスへの異なるjQueryajax呼び出しが発生します。ただし、私のUIには、各クエリの結果のテーブルを表示する種類の要約ページが表示されます。クエリ結果ごとにObservableArraysを持つ単一のKnockoutViewModelを作成するのは本当に簡単なようですが、これに間違ってアプローチしている可能性があります。いずれにせよ、複数の呼び出しを1つのモデルに統合する方法、または呼び出しごとに複数のモデルを利用する方法がわかりません。

誰かが私を正しい方向に向けるために共有できるドキュメントやサンプルコードを持っていますか?

更新: Knockoutオブジェクトでこの最終結果/構造を実現したいと思います。基本的に、これは1対多の関係であり、1つの場所から多くのサーバーまたはテナントになります。

LOCATION
  - Name
  - ID
  - Date
  - Servers []
  - Tenants []

ありがとう

4

2 に答える 2

1

私がやっていることは、ページの1つのビューモデルを作成し、各呼び出しからの値でプロパティを更新することです。3つのパラメーターを持つko.mappingプラグインを使用して、既存の監視可能な配列を更新し、プロパティを監視可能にします。ko.mapping.fromJSON呼び出しは、結果を取得するAJAX呼び出しの成功関数に入ります。簡単にするために、クリックハンドラーを作成しました 。http://jsfiddle.net/jgoemat/v9XTf/

var jsonLocations = '[{"name":"home"},{"name":"work"}]';
var jsonServers = '[{"name":"Mercury"},{"name":"Venus"}]';
var jsonTenants = '[{"name":"Betty"},{"name":"Frank"}]';

function ViewModel() {
    var self = this;
    self.locations = ko.observableArray();
    self.servers = ko.observableArray();
    self.tenants = ko.observableArray();

    self.loadLocations = function() { ko.mapping.fromJSON(jsonLocations, {}, self.locations); };
    self.loadServers  = function() { ko.mapping.fromJSON(jsonServers, {}, self.servers); };
    self.loadTenants = function() { ko.mapping.fromJSON(jsonTenants, {}, self.tenants); };
}

var my = { vm: new ViewModel() };                                                        

ko.applyBindings(my.vm);​

編集-更新されたフィドル

ロケーションにテナントが含まれている場合は、ロケーションのそのプロパティを変更できます。koイベントハンドラーは、現在のモデルをハンドラーに渡します。

self.loadServers  = function(location) {
    ko.mapping.fromJSON(jsonServers, {}, location.Servers);
};

jQueryを使用ko.dataFor(element)している場合は、要素が次のコンテキストからモデルを取得するために使用できます。

$('.loadAll').live('click', function(e) {
    var location = ko.dataFor(this);
    // location can be used in success callback of ajax 
    ko.mapping.fromJSON(jsonServers, {}, location.Servers);
    ko.mapping.fromJSON(jsonTenants, {}, location.Tenants);
});
于 2012-05-28T22:32:28.347 に答える
0

私があなたの言うことを正しく聞いていれば、あなたは場所のobservableArrayを持つビューモデルを持っています。各場所には、サーバーのアレイとテナントのアレイがあります。これに取り組む1つの方法は、すべての戻り値を格納するオブジェクトを作成することです。そのため、そのオブジェクトには{場所:[]、サーバー:[]、テナント:[]}がある可能性があります。これはすべて、オブジェクトのメインルートから外れています。

場所を取得したら、それらを観測量のローカルモデルにマッピングします。サーバーと呼ばれるプロパティをロケーションオブジェクトに追加します。これは、その場所のサーバーへのナビゲーションに使用されます。サーバープロパティは、検索を実行するか(低速ですが、より適応性があります)、メモオブジェクトを使用して場所のインデックスを検索できます。重要なのは、このローカルのメモリオブジェクトを設定して、データを追跡し、ナビゲーションを機能させ続けることです。

もう1つのオプションは、各ロケーションのサーバーをクライアント上のそれぞれのロケーションオブジェクトにロードすることです。いずれにせよ、クライアントで独自のモデルを作成します。サーバーが私に提供するものを正確に取得することはめったになく、何かにマップすることはありません。ところで-私はこれにマッピングプラグインを使用していませんが、可能だと思います。

于 2012-05-29T14:18:04.073 に答える