我有一个名为 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”数组中的项目数量,但无法访问它们。我想我在发布该集合时遗漏了一些东西,但我不知道是什么。
最佳答案
正如您在评论中指出的那样,您的问题是您有一个名为“length”的字段。不幸的是,如果对象具有 length
属性,则序列化代码会将该对象误认为是数组。
参见bug report .
一种巧妙的解决方法是将字段重命名为其他名称,例如 safeLength
、overrideLength
、len
甚至 langth
.
关于javascript - 服务器和客户端的 meteor 收集有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20457474/