【问题标题】:Writing toJSONValue methods with nested EJSON types?使用嵌套的 EJSON 类型编写 toJSONValue 方法?
【发布时间】:2014-03-24 02:40:28
【问题描述】:

我有两种自定义类型,BoardTile。两者都需要与EJSON 兼容。但是,Board 包含一个二维数组Tiles:

function Board(size) {
  this.tiles = [];
  for (var row = 0; row < size; row++) {
    this.tiles[row] = [];
    for (var col = 0; col < size; col++) {
      this.tiles[row][col] = new Tile(row, col);
    }
  }
  /* ... */
}

我的问题是关于Board 上的toJSONValue 方法。我是否需要像这样显式转换嵌套的Tiles:

Board.prototype.toJSONValue = function() {
  var value = {};
  value.tiles = _.map(this.tiles, function(row) {
    return _.map(row, function(tile) {
      return tile.toJSONValue();
    });
  });
  return value;
};

或者嵌套的EJSON 类型会自动转换,允许我做这样的事情:

Board.prototype.toJSONValue = function() {
  return { tiles: this.tiles };
};

我怀疑第一种方法会导致我的Tile 对象被视为普通对象,而不是使用我为它们定义的EJSON 接口。但第二种方式似乎是对 toJSONValue 方法的无效使用。这让我想知道是否甚至可以使用EJSON 嵌套自定义类型?

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    JSON.stringify 不仅适用于数组,还适用于数组数组。例如,使用 JavaScript 控制台演示:

    所以在你的情况下,你的最后一个函数,只有一行返回,应该可以工作。不是吗?

    另见this article;基本上要创建自定义 EJSON 类型,您需要定义一种将数据表示为标准 JSON 可序列化类型(普通对象、数组等)的方法。您的数组数组已经是兼容的 JSON 可序列化类型,所以它应该按原样工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      • 2018-12-13
      • 2019-08-28
      相关资源
      最近更新 更多