Метеор обращается к помощникам от других помощников

Я новичок в Meteor и его API / философии, так что я могу думать об этом неправильно.

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

// addfriend.js
Template.friendRequests.helpers({
  friendRequests: function () {
    return [
      { username: 'alice' },
      { username: 'carl' },
      { username: 'eve' },
    ];
  },

  hasFriendRequests: function () {
    var template = Template.instance();
    return template.helpers.friendRequests.length > 0;
    }
});

// addfriend.html
<template name="friendRequests">
  <h2>Friend requests</h2>
  {{#if hasFriendRequests}}
    <p>Someone's popular today!</p>
    <ul>
    {{#each friendRequests}}
      <li>{{username}}</li>
    {{/each}}
    </ul>
  {{else}}
    <p>Sorry, nobody likes you right now.</p>
  {{/if}}
</template>

Моя проблема в том что friendRequests в конечном итоге будет запрос MongoDB, и я хочу hasFriendRequests не повторять этот запрос. Я просто хочу, чтобы это действовало на friendRequests помощник. Но приведенный выше код не работает для этого.

В целом, я заинтересован в возможности применить любую функцию f дорогому помощнику, чтобы мне не пришлось пересчитывать его. Так что, если вы можете осветить меня, это было бы здорово!

Один из способов сделать это - поместить данные в Session и работает от этого там. Это как это должно быть сделано?

Любая помощь будет оценена!

Спасибо! Алинь

Редактировать: я понимаю friendRequests.length работает здесь на самом деле, но мне все еще интересно, как это сделать в общем случае.

1 ответ

Решение

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

Оказавшись на клиенте, ваш друг запрашивает помощника, а ваши hasFriendRequests будут использовать те же данные на стороне клиента. Данные на самом деле копируются в клиентскую мини-базу данных mongodb, на которую просто подписана информация.

Итак, короткий ответ: для этого будет только один запрос к БД, потому что метеор сделает всю магию за вас.

Ключ будет в настройке вашей публикации и подписки. Итак, если вы играете только румянами и подписываетесь на него один раз. У вас все настроено.

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