Knockout.Mapping为简单的JSON数组创建映射钩子

时间:2012-10-07 23:11:29

标签: javascript knockout.js knockout-mapping-plugin

当使用knockout.js的knockout.mapping插件时,我可以自定义集合中的项目创建方式如下: -

var ItemModel = function (data) {
    ko.mapping.fromJS(data, {}, this);
    this.FooProperty = ...;
};

var mapping = {
    'Items': {
        create: function (options) {
            return new ItemModel(options.data);
        }
    }
}

this.Items = ko.mapping.fromJS(data,mapping);

这假设数据包含属性“Items”,其中包含一个集合。但是,如果数据只是一个JSON数组呢?如何将创建函数挂钩到传入数据的顶级根目录中?

从查看文档看,映射对象中的键似乎可以是要处理的数据的属性名称,或者它们可以是include,ignore,copy之一。从这一点来看,我无法看到如何实现我想要的东西,除非我将传入的JSON包装到具有属性的对象中,映射它,然后打开结果。

1 个答案:

答案 0 :(得分:3)

您可以在映射对象的顶层放置一个create函数来处理根对象:

像:

var mapping = {
    create: function(options) {

    }
};

或者,你可以像以下一样传递它:

ko.mapping.fromJS({ Items: data });

但听起来好像你试图避免这样做。