我在服务器上发布了一个集合并在客户端上自动订阅。我想在会话中设置“选定”项目并让模板更新以仅显示选定项目,但似乎这只能通过往返服务器来完成(这完全没有必要)。
常见的:
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 来隐藏未选择的任务,但让我的头脑围绕着 Meteor,使用数据和反应性来驱动选择似乎很自然/本地过滤。
有什么办法可以避免往返还是我只是用错了?