サーバーで公開され、クライアントで自動サブスクライブされたコレクションがあります。セッションで「選択した」アイテムを設定し、選択したアイテムのみを表示するようにテンプレートを更新したいのですが、これはサーバーへのラウンドトリップでしか実行できないようです (これはまったく不要です)。
一般:
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に頭を悩ませました。 /ローカルフィルタリング。
往復を回避できる方法はありますか、それとも間違って使用していますか?