流星集合在服务器和客户端上有所不同

时间:2013-12-08 18:50:54

标签: javascript meteor

我有一个名为GameMaps的集合,定义如下:

GameMaps = new Meteor.Collection('gameMaps');

此集合中的条目如下所示:

{
  name: 'foo',
  structure: {
    arg1: 'bar',
    fields: [
      {name: 'someName', value: 'someValue'},
      {name: 'someOtherName', value: 'someOtherValue'}
    ]
  }
}

现在,在服务器上,我可以通过以下方式访问结构的第一个字段:

GameMaps.findOne({name: 'foo'}).structure.fields[0]

按预期返回此对象:

{name: 'someName', value: 'someValue'}

但是当我尝试在客户端上执行相同操作时,我得到一个空对象:

Object {}

我对该集合的出版物如下所示:

Meteor.publish('allMaps', function() {
  return GameMaps.find();
});

订阅如下:

Meteor.subscribe('allMaps');

在客户端上,我看到了这个集合项的所有内容,除了“fields”数组中的对象。我甚至看到“fields”数组中的项目数量但无法访问它们。我想在发布这个集合时我遗漏了一些东西,但我看不出是什么。

1 个答案:

答案 0 :(得分:1)

正如您在评论中指出的那样,您的问题是您有一个名为“长度”的字段。遗憾的是,如果序列化代码具有length属性,则会将该对象错误地视为数组。

请参阅bug report

一个hacky解决方法是将字段重命名为safeLengthoverrideLengthlen甚至langth