我有一个视图模型,其中一些可供选择的属性值由其他属性决定,这是通过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
创建的服务器视图模型发送任意数据(并且需要映射)。
计算可供选择的选项的代码在辅助函数中(下面显示了我的初始静态定义示例中的两个相关属性的示例):
self.availableDatabases = myutils.ko.createComputedDepdency(this.selectedOs, this.dbOptions);
self.availableClusteringOptions = myutils.ko.createComputedDepdency(this.selectedDb, this.dbClusteringOptions);
我已经重写了我的serverData,我需要知道的唯一的事情就是从服务器动态传递的数组的选定项,在这种情况下它是options数组:selectedServerOption
,{{ 1}},selectedOsOption
和selectedDatabaseOption
我无法处理映射并且不确定如何使用selectedClusterOption
数组。
如何处理下面选项字段的映射?
requiresMapping
我目前的小提琴就在这里:http://jsfiddle.net/g18c/DTdyM/5/
答案 0 :(得分:0)
在查看Automate mapping of dependent properties in knockout答案和@PW Kad的代码之后,编写一个简单的自定义映射器是有意义的。
我选择在ko.mapping上编写自己的映射器,因为我无法确定如何引用需求的映射(使用ko.mapping),特别是如何从{{1}创建多个属性映射函数(因为我可以看到我只能返回一个新属性,而不是我需要的多个属性)。
看起来效果很好,但是会很感激评论或使用ko.mapping的替代方案,只是为了帮助我理解,特别是如果我重新发明轮子的话!
Fiddle is here: http://jsfiddle.net/g18c/DTdyM/26/
create