knockout mapping:将两个对象合并为一个

时间:2014-03-13 08:36:44

标签: knockout.js

我有json来自服务器。它包含类似数组(Schedule)的内容,但每个Schedule元素由另外两个对象组成。

每个Schedule元素都是这样的:

{"Schedule":[
    {"InputItem": {"Id" : "1231", "Name": "TempName"}, 
     "OutputItem": {"CalcId" : "a1231", "CalcName": "CakcTempName"}
    },
    ...
]};

所以,在淘汰赛中,我有一个接受jsonData的视图模型(如上所述):

var viewModel = function(jsonData) {
     var self = this;

     var customMapping = {
         //'Schedule': {
         // 
         // }
     };
     ko.mapping.fromJS(jsonData, customMapping, self);
};

结果我得到包含InputItemCalculatedItem的self.Schedule数组。 但是,我需要创建一个将InputItemCalculatedItem合并到一个对象中的自定义映射,例如ScheduleItem,这样在映射后我就不会InputItemCalculatedItem,但只有一个ScheduleItem

有可能吗?

P.S。我需要这个的原因是因为在网格中显示Schedule数组要容易得多。网格的一半是InputItems,但网格的一半是CalculatedItems。在UI上我不需要分离这些项目。 我可以解决这个问题也改变了我的服务器端模型,但在这里我要问的是KO部分。

1 个答案:

答案 0 :(得分:0)

查看documentation on the mapping plugin。 “使用'create'自定义对象构造”一节说明了如何定义自己的逻辑来控制映射数据的创建。这将允许您使用简单的jQuery映射来执行对所需对象结构的投影。