仅使用Knockout toJSON序列化某些属性

时间:2013-10-22 08:04:07

标签: json knockout.js

我有一个具有相当多属性的视图模型,但我只想使用toJSON方法序列化两个可观察数组。这可能吗?

我确实遇到过一篇文章说要做这样的事情:

var json = ko.toJSON(self, ["rates", "discounts"]);

但这只会产生以下结果:

{"rates":[{},{},{},{},{},{}],"discounts":[{},{},{},{}]} 

这是正确的费率和折扣数量,但由于某种原因它们都是空的。

2 个答案:

答案 0 :(得分:1)

单程

var json = ko.toJSON({ rates: self.rates, discounts: self.discounts  });

或者使用ko.mapping插件,您可以在其中配置要包含的成员

答案 1 :(得分:0)

您可以使用Array.map来展平数组中的项目。

这应该可以解决问题:

function flattenArrayItem(arrayItem) {
  var result = {
      prop1: arrayItem.prop1,
      prop2: arrayItem.prop2
      // continue mapping needed properties
  }; 
  return result; 
}

// if observable array
var json = ko.toJSON(someArray().map(flattenArrayItem));
// if normal array
var json = ko.toJSON(someArray.map(flattenArrayItem));