私がやっていることは、ページの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);
});