選択可能ないくつかのプロパティ値が他のプロパティによって決定されるビューモデルがあります。これはrequires
フィールドを介して設定されます。
var clusterOptions = [{
name: "None",
sku: "0",
price: 0,
}, {
name: "Standard MySQL Cluster",
sku: "4101",
requires: ["MySQL1"],
price: 10,
}, {
name: "Enterprise MS SQL Cluster",
sku: "4102",
requires: ["402"],
price: 5,
}, {
name: "NoSQL Sharding",
sku: "4103",
requires: ["403","404"],
price: 10,
}];
database
コードは機能します (さまざまなオプションをクリックすると、依存するオプションがどのように変化するかを確認できますdatabase clustering
): http://jsfiddle.net/g18c/DTdyM/
このコードは静的に型付けされており、これを変換して、 で作成されたサーバー ビューモデルから任意のデータ (およびマッピングが必要) を送信できるようにしようとしていますko.mapping
。
選択のために利用可能なオプションを計算するコードは、ヘルパー関数にあります (最初の静的に定義された例からの 2 つの依存プロパティの例を以下に示します)。
self.availableDatabases = myutils.ko.createComputedDepdency(this.selectedOs, this.dbOptions);
self.availableClusteringOptions = myutils.ko.createComputedDepdency(this.selectedDb, this.dbClusteringOptions);
serverData を書き直しました。モデルから知る必要があるのは、サーバーから動的に渡された配列の選択項目だけです。この場合は、オプション配列です: selectedServerOption
、selectedOsOption
、selectedDatabaseOption
およびselectedClusterOption
マッピングの処理に行き詰まり、requiresMapping
配列の操作方法がわかりません。
以下のオプション フィールドのマッピングを処理するにはどうすればよいですか?
var serverData = {
options: [serverOptions, osOptions, databaseOptions, clusterOptions],
requiresMappings: [
{target: "selectedOs", options: "dbOptions"},
{target: "selectedDb", options: "dbClusteringOptions"}
]
}
var mappingScheme = {
'options' : {
create: function(options){
console.log("creating sku: " + options.data.sku);
// 1) create dependency using requiresMappings property
// myutils.ko.createComputedDepdency(this.selectedOs, this.dbOptions);
// 2) subscribe to updates
// self.availableDatabases.subscribe(function () {self.selectedDb(self.availableDatabases()[0].sku);});
}
},
// ignore these mappings we don't want to observe them, they are used to define mappings for the creation function above
'ignore' : ["requiresMappings"]
}
var viewModel = ko.mapping.fromJS(serverData, mappingScheme);
私の現在のフィドルはここにあります:http://jsfiddle.net/g18c/DTdyM/5/