Метеор обращается к помощникам от других помощников
Я новичок в 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, на которую просто подписана информация.
Итак, короткий ответ: для этого будет только один запрос к БД, потому что метеор сделает всю магию за вас.
Ключ будет в настройке вашей публикации и подписки. Итак, если вы играете только румянами и подписываетесь на него один раз. У вас все настроено.