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

Javascript 敲除到JSON的映射-不能忽略嵌套子级,javascript,knockout.js,knockout-mapping-plugin,Javascript,Knockout.js,Knockout Mapping Plugin,假设我有一个如下所示的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"}} 敲除映射

假设我有一个如下所示的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" ] }

我有一个类似的忽略列表,其中一些“ID”必须被抑制,其他的保持不变。我想对答案进行扩展,以便使用fromJS的人可以看到特定的忽略项

var data1 = {
        invoice: { id: 'a1', name: 'a2', type: 'a3'},
        shipping: "b1",
        id:"c1"
};
var resultvm=ko.mapping.fromJS(数据1,{'ignore':[“invoice.id”, “船舶”]};ko.应用绑定(resultvm)

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

{“发票”:{“名称”:“a2”,“类型”:“a3”},“id”:“c1”}

但toJSON提供了

代码:

var result=ko.mapping.toJSON(数据1,{ignore:[“invoice.id”, “航运”]}

结果:

{“发票”:{“id”:“a1”,“名称”:“a2”,“类型”:“a3”},“id”:“c1”}


这是我的JSFIDLE:

完美!因此,这意味着viewmodel中不能有重复的属性名称。我没有意识到映射会施加这样的限制。非常感谢杰夫。我知道这很糟糕:-(