使用来自服务器和ko.mapping的元数据处理任意选项创建函数

时间:2013-10-18 10:30:58

标签: knockout.js knockout-mapping-plugin

我有一个视图模型,其中一些可供选择的属性值由其他属性决定,这是通过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,
}];

代码有效(您可以看到点击不同选项如何更改相关选项databasedatabase 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}},selectedOsOptionselectedDatabaseOption

我无法处理映射并且不确定如何使用selectedClusterOption数组。

如何处理下面选项字段的映射?

requiresMapping

我目前的小提琴就在这里:http://jsfiddle.net/g18c/DTdyM/5/

1 个答案:

答案 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