【发布时间】:2012-12-05 11:33:34
【问题描述】:
我在服务器上发布了一个集合并在客户端上自动订阅。我想在会话中设置“选定”项目并让模板更新以仅显示选定项目,但这似乎只能通过往返服务器来完成(这完全没有必要)。
常见:
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>
我的要求是 Template.missionList.missions 中的 Missions.find() 过滤客户端缓存的结果,而不是从服务器重新请求,但我似乎找不到允许我的标志或设置告诉 minimongo 只使用当前可用的数据。
我也不完全确定这是否是我应该做的,我一开始只是使用 jQuery 来隐藏未选择的任务,但我的头是流星,使用数据和反应性似乎很自然驱动选择/本地过滤。
有什么办法可以避免往返还是我用错了?
【问题讨论】:
标签: meteor