2013-12-08 2 views
2

я коллекцию под названием 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] 

, который возвращает этот объект в ожидании d:

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

Но когда я пытаюсь выполнить то же самое на клиенте я получаю пустой объект:

Object {} 

Моя публикация для коллекции выглядит следующим образом:

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

И подписка вот так:

Meteor.subscribe('allMaps'); 

На клиенте я вижу все элементы этой коллекции, за исключением объектов в массиве «fields». Я даже вижу количество элементов в массиве «поля», но не могу получить к ним доступ. Наверное, я упускаю что-то, когда публикую коллекцию, но я не понимаю, что.

+0

Что произойдет, если вы измените имя 'fields' на что-то еще? –

+0

Можете ли вы также показать код для определения коллекции? Кроме того, есть ли причина, по которой вы добавляете команду subscribe в блок автозапуска? –

+0

Как вы к ним обращаетесь? Подождите, пока подписка закончится? Одинаково ли это, если вы пытаетесь получить доступ к нему в консоли js? – Akshat

ответ

1

Как вы определили в своих комментариях, ваша проблема в том, что у вас есть поле с именем «длина». К сожалению, код сериализации ошибочно воспринимает объект как массив, если он имеет свойство length.

См. bug report.

Hacky временное решение переименовать поле, то еще как safeLength, overrideLength, len или даже langth.

Смежные вопросы