敲除映射到 JSON - 不能忽略嵌套的子项

Knockout Mapping toJSON - cannot ignore nested child

假设我有一个如下所示的 viewModel。

var data = {
        a: { a1: "a1", a2: "a2" },
        b: "b"
    };

我想忽略 a.a1 和 b。所以我的预期 JSON 是

{"a":{a2:"a2"}}

然而,在这样做时

var result = ko.mapping.toJSON(data, { ignore: ["a.a1", "b"] })

我得到结果=

{"a":{"a1":"a1","a2":"a2"}}

敲除映射并未忽略 a.a1。这是插件中的错误吗?它正确地忽略了 'b' 但为什么不 'a.a1'?

ignore 数组中找到的名称应该是 属性 的名称,无论它在对象中的级别如何。您必须使用:

{ ignore: [ "a1", "b" ] }

我有类似的忽略列表,其中一些 "ids" 必须被抑制,而其他则保持原样。我想扩展答案,以便使用 fromJS 的人可以看到特定的忽略是有效的

var data1 = {
        invoice: { id: 'a1', name: 'a2', type: 'a3'},
        shipping: "b1",
        id:"c1"
};

var resultvm = ko.mapping.fromJS(data1, {'ignore':["invoice.id", "ship"]}); ko.applyBindings(resultvm);

将为您提供如下输出。请注意,只有发票的 ID 被忽略了。

{"invoice":{"name":"a2","type":"a3"},"id":"c1"}

但是toJSON给出

代码:

var result = ko.mapping.toJSON(data1, { ignore: ["invoice.id", "shipping"] });

结果:

{"invoice":{"id":"a1","name":"a2","type":"a3"},"id":"c1"}

这是我的 jsFiddle:https://jsfiddle.net/3b17r0ys/8/