我有一个名为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');


在客户端上,除了“字段”数组中的对象外,我看到了所有此收集项。我什至在“字段”数组中看到了项目数量,但无法访问它们。我想我在发布收藏集时会丢失一些东西,但是我看不到。

最佳答案

正如您在注释中所标识的那样,问题是您有一个名为“ length”的字段。不幸的是,如果对象具有length属性,则序列化代码会将其误认为是数组。

请参见bug report

一个棘手的解决方法是将字段重命名为safeLengthoverrideLengthlen甚至langth之类的其他内容。

关于javascript - meteor 收集在服务器和客户端上有所不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20457474/

10-12 06:32