1

当为 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(数据,映射);

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

从查看文档来看,映射对象中的键似乎可以是要作用的数据的属性名称,也可以是包含、忽略、复制之一。由此,我看不出如何实现我想要的,除非我将传入的 JSON 包装到一个具有属性的对象中,映射它,然后解包结果。

4

1 回答 1

3

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

像:

var mapping = {
    create: function(options) {

    }
};

或者,您可以像这样传递它:

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

但听起来你可能试图避免这样做。

于 2012-10-07T23:43:09.447 回答