クライアント側から、JSONで3つの異なるドメインモデルを提供するRESTサービスに対して複数のajax呼び出しを行う必要があります。クライアント側では、コントロールにバインドする前に、それらをビューモデルに変換する必要があります。これは、プレゼンテーションのみのデータを使用して、それらを完全に異なる構造に変換することを意味します。どんなアイデアや提案も役に立ちます。
3 に答える
http://jsfiddle.net/sujesharukil/RJGQw/
var vm1 = {
Id: 1,
Name: 'some name',
Address1: 'Some street somewhere',
City: 'New York',
Country: 'USA',
Zip : '11111'
};
var vm2 = {
title: 'Mr',
designations: ['Chief', 'Boss', 'Lord'],
secrets: ['xxxxx','yyyyy','zzzzz']
};
var vmCombines = function(data1, data2){
return {
combinedName: ko.observable(data2.title + ' ' + data1.Name),
designation: ko.observable(function(){
if(data2.designations.length == 0)
return '';
return data2.designations.join();
}()),
Address: ko.observable(function(){
return data1.Address1 + ', ' + data1.City + ',' + data1.Country + ',' + data1.Zip
}())
}
};
ko.applyBindings(new vmCombines(vm1, vm2));
そしてHTML
<input type="text" data-bind="value: combinedName"/><br />
<input type="text" data-bind="value: designation"/><br />
<input type="text" data-bind="value: Address"/><br />
var viewModel = JSON.parse(jsonContentFromService);
多分このようなもの:
var mainVM = {};
mainVM.SomeStuffFromVm1 = vm1.WhateverYouNeed
mainVM.SomeStuffFromVM2 = vm2.WhateveryYouNeed;
シングルページWebアプリケーションに関するJohnPapaのコースを確認する必要があります。彼は、あなたのニーズに合うと確信しているアーキテクチャについて説明しています。彼はWebAPIを1つしか持っていませんが、複数を使用してもアーキテクチャに違いはありません。
model.employee
簡単に言うと、クライアント側のオブジェクト(および)の形状を定義するモデルモジュールが必要ですmodel.customer
。次に、ビューモデルモジュールには、(とりわけ)これらのオブジェクトの1つ以上を含むビューモデルが含まれます。たとえば、従業員オブジェクトvm.employees
のリスト( )が含まれ、関連する顧客を持つ従業員のリストが含まれます。オブジェクトからの部分データとオブジェクトからの部分データのみを持つビューモデルが必要な場合は、やなどの新しいモデルを定義してから、そのようなアイテムのリストを使用するビューモデルを定義する必要があります。ko.observableArray
vm.employeesAndCustomers
ko.observableArray
model.employee
model.customer
model.employeeBrief
model.customerBrief
モジュールを使用dataservice
してサービスからデータを取得し、モジュールdatacontext
を使用して、受信したJSONをクライアント側(model。*)オブジェクトのリストに変換し、これらのリストをメモリに保持する必要があります。observableArrays
ビューモデルはから受け取りますdatacontext
。
はモジュールをdatacontext
使用しmodel.mapper
て、受信したJSONをクライアント側の形式に変換します。