javascript - 服务器和客户端的 meteor 收集有所不同

标签 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”数组中的项目数量,但无法访问它们。我想我在发布该集合时遗漏了一些东西,但我不知道是什么。

最佳答案

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

参见bug report .

一种巧妙的解决方法是将字段重命名为其他名称,例如 safeLengthoverrideLengthlen 甚至 langth .

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

相关文章:

node.js - 在 Meteor 1.5.1 中使用 buffermaker 时找不到模块 './lib/BufferMaker'

javascript - meteor @import css : Resource interpreted as Stylesheet but transferred with MIME type text/html:

javascript - 如何为 Google Chrome 扩展程序动态更改 popup.html 的大小

javascript - 使用 jQuery 将 XML 转换为 JSON 并输出为 HTML

javascript - Math.min 和 Math.max 超出了最大调用堆栈大小

javascript - Meteor React 验证包

meteor - 使用 HTML 代码将 Parsley.js 与 Meteor 结合使用

windows - Babun 或 Cygwin 与 meteor

javascript - 使用 Greasemonkey 修改 Craigslist 的默认搜索结果排序?

javascript - Spring Boot - 为什么我的应用程序找不到静态资源?