Реактивность только на стороне клиента с Метеором?
У меня есть коллекция, опубликованная на сервере и автоматически подписанная на клиенте. Я хотел бы установить «выбранный» элемент в сеансе и иметь обновление шаблона, чтобы отображать только выбранный элемент, но, похоже, это можно сделать только с помощью туда-обратно на сервер (что совершенно не нужно).
Общие:
var Missions = new Meteor.Collection('missions');
Клиент:
Template.missionList.missions = function() {
var currMission = Session.get('selectedMission');
var searchMission = {};
if(currMission)
{
searchMission['_id'] = currMission;
}
return Missions.find(searchMission);
};
Template.missionList.events({
'click div.mission': function (e, t) {
Session.set('selectedMission',
this._id == Session.get('selectedMission') ? null : this._id
);
}
});
Template.mission.isSelected = function() {
return this._id == Session.get('selectedMission');
};
Meteor.autosubscribe(function () {
Meteor.subscribe("missions");
});
Сервер:
Meteor.publish('missions', function() {
// there are really some filters here, but removed for simplicity
return Missions.find();
});
Шаблон:
<template name="missionList">
<div class="missionList">
{{#each missions}}
{{> mission}}
{{/each}}
</div>
</template>
<template name="mission">
<div class="mission{{#if isSelected}} selected{{/if}}">details</div>
</template>
Мое требование дляMissions.find()
вTemplate.missionList.missions
для фильтрации кэшированных результатов на стороне клиента, а не для повторного запроса с сервера, но я не могу найти флаг или настройки, которые позволили бы мне сказать minimongo использовать только доступные в настоящее время данные.
Я также не совсем уверен, если это то, что я должен делать, я начал с использования jQuery, чтобы скрыть невыбранные миссии, но обдумал Метеор, и кажется естественным использование данных и реактивности для выбора. / локальная фильтрация.
Есть ли способ избежать обхода или я просто неправильно его использую?