Обзор (упрощенный)
Я запускаю сервер Meteor с публикацией, параметризованной по идентификатору:
Meteor.publish('documents.byId', function(documentId) {
...
return Documents.find({documentId});
});
К коллекции Documents
(имя изменено) прикреплена SimpleScema. Схема этого документа содержит поле, представляющее собой массив вложенных документов.
Documents.schema = new SimpleSchema({
...
subdocuments: {
label: 'Sub Documents',
type: [SubDocumentSchema],
defaultValue: [],
optional: true
}
...
});
Documents.attachSchema(Documents.schema);
Затем у меня есть контейнер на стороне клиента обычным образом с подпиской:
...
var handle = Meteor.subscribe('documents.byId', documentId);
...
var document = Meteor.collection('documents').findOne();
...
Описание проблемы
На клиенте react-native-meteor
данные подписки правильно принимаются клиентом только если в массиве нет вложенных документов. Как только добавляется вложенный документ, когда я пытаюсь повторно подписаться на react-native, список становится пустым. Интересно, что если я уже подписался, он все еще замечает изменения в документе, но как только я перезагружаю приложение, он больше не может его найти.
На сервере я проверил, что документы найдены путем регистрации, но на клиенте, когда я делаю Meteor.collections('documents).findOne()
, он пуст, если только поле поддокумента не пусто.
На веб-клиенте для метеор-сервера, если я подписываюсь на документ по ID, все нормально, сколько бы ни было вложенных документов.
Вопрос
Я подозреваю, что это либо какая-то простая ошибка в стиле опечатки, либо проблема с самим react-native-meteor
. Может ли кто-нибудь еще воссоздать это? Я застрял на этом некоторое время - мое единственное предположение состоит в том, что, возможно, нативная версия каким-то образом не устраивает схему?
[Изменить] Версии
Версия React-Native: 0.39.2
Метеор версия: 1.4.2.3
[Обновлять]
Пока я искал и просматривал код react-meteor-native
, чтобы увидеть, что он делает, я обнаружил, что однажды данные действительно вернулись! Так что это, вероятно, какая-то проблема времени?
[Обновление 2]
Если я отфильтрую массив вложенных документов на стороне сервера, собственный клиент снова начнет работать:
return Documents.find({documentId}, {
fields: {'subdocuments': 0}
}
Возможно, react-native-meteor
что-то не нравится в формате/схеме поддокумента...
[Обновление 3]
Я экспериментально удалил поле "id" из массива вложенных документов, и теперь все работает нормально. Так что это проблема с наличием поля типа Meteor.Collection.ObjectID
в массиве вложенных документов...