Knockout Mapping toJSON - 无法忽略嵌套子

时间:2015-10-16 23:01:16

标签: 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"}}

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我有类似的忽略列表,其中有些" ID"必须被压制而其他人则被保留下来。我想扩展答案,以便使用fromJS的人可以看到特定的忽略工作

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

var resultvm = ko.mapping。 fromJS (data1,{'忽略':[" invoice.id",   "船舶"]}); ko.applyBindings(resultvm);

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

  

{"发票" {"名称":" A2""类型":" A3"} " ID":" C1"}

但toJSON给出了

代码:

  

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

结果:

  

{"发票" {" ID":" A1""名称":" A2&#34 ;, "类型":" A3"}" ID":" C1"}

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