Получение дополнительных полей для объекта минимонго с помощью публикации-подписки Метеора

Приложение, которое я создаю, содержит коллекцию игр. Каждый объект в этой коллекции имеет массу данных, связанных с ним. Настолько, что, перечисляя игры для каждого пользователя, я должен ограничить поля, которые я ему отправляю. Это все обычные вещи и работает нормально. Проблема возникает, когда я хочу получить больше полей для конкретной игры, скажем, когда я иду на ее страницу, мне нужно больше, чем просто описание и название.

Ниже приведена публикация списка игр, за которой следует публикация, которую я пытаюсь использовать для обновления документа всеми полями.

Meteor.publish('games', function() {
    return Games.find({owner: this.userId}, {fields: {
        name: 1,
        description: 1
    }});
});

//Publish all the fields for the given game
Meteor.publish('game', function(gameId) {
    return Games.find({_id: gameId});
});

Мое понимание функциональности подписки на публикацию в Meteor заключается в том, что вторая публикация обновит коллекцию минимонго игр, предоставляя новые поля объекту в коллекции.

Однако моё понимание кажется ошибочным, или в моей реализации что-то не так.

Когда я захожу в коллекцию игр console.log(Games) на странице списка, где я подписываюсь на "игры" опубликовать. Я получаю то, что ожидал, коллекцию, которая содержит все игры, принадлежащие текущему пользователю. Все документы имеют только название и описание, как и ожидалось.

Когда я иду на страницу игры, где я подписываюсь на "игру". Коллекция неожиданно меняется. Когда я делаю тот же журнал, что и выше, я получаю коллекцию, которая имеет только один объект, но имеет все поля. Это не то, что я ожидал, но это работает для того, что мне нужно.

Проблема приходит после этого. Когда я делаю на стороне клиента, выберите (ниже) в коллекции minimongo. Я получаю объект, который имеет только описание и имя.

game: () => {
    return Games.findOne({_id: $stateParams.gameId});
}

Я делаю поиск в собрании, в котором есть объект со всеми полями, которые я хочу, но объект, который возвращает выбор, имеет только два поля, которые я определил заранее.

Я заблудился относительно того, как заставить это работать, и проблемы, с которыми я сталкиваюсь, выбрасывают мое понимание функции подписки публикации в Метеоре из окна.

Я могу добавить несколько скриншотов объектов коллекции в консоли браузера, если это необходимо

Любые идеи или предложения, чтобы попробовать?

РЕДАКТИРОВАТЬ: Вот два гистограммы с моими угловыми компенетами, которые показывают подписку:

игра: https://gist.github.com/Jiig/f9577469d868a3165221

игры: https://gist.github.com/Jiig/70dce515581ce12beb6f

1 ответ

Решение

То, как вы описываете поведение, кажется мне нормальным: вы подписываетесь на коллекцию со всеми предметами, а с другой стороны, вы подписываетесь на подмножество, поэтому "магия" Метеора работает здесь против вас.

Есть пара вещей, которые вы можете сделать:

  • подписывайтесь на ОБА подписки на странице только с одной Игрой: это предотвратит очистку полного списка, потому что вы на него не подписаны, и обновит только одну Игру со всеми ее полями.

  • разделите Коллекции на опции Info и Generic: я думаю, это доставляет вам больше хлопот, но это вариант.

  • Сделайте вызов метода, чтобы получить информацию для одной игры: немного хакерский, но должен работать.

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

Удачи.

Другие вопросы по тегам