可能な解決策は、依存オブジェクトを作成し、すべてのカテゴリの変更を監視し、アクティブ フラグが切り替えられた場合に dep の変更をトリガーすることです。これらの行に沿ったもの:
var activeCount = Categories.find({active: true}).count();
var activeDep = new Deps.Dependency();
Deps.autorun(function() {
var activeCountNow = Categories.find({active: true}).count();
if(activeCountNow !== activeCount) {
activeCount = activeCountNow;
activeDep.changed();
}
});
Meteor.publish('items', function(){
activeDep.depend();
return Item.find({categoryId: Categories.find({active: true} });
});
注: アクティブなカテゴリの数に変更があるかどうかのみを確認しているため、アクティブなリストをメモリに保持する必要はありません。これは、アプリの動作に応じて適切な場合とそうでない場合があります。
編集:コメントに記載されている両面フレーバー:
クライアント:
var activeCount = Categories.find({active: true}).count();
var activeDep = new Deps.Dependency();
Deps.autorun(function() {
var activeCountNow = Categories.find({active: true}).count();
if(activeCountNow !== activeCount) {
activeCount = activeCountNow;
activeDep.changed();
}
});
Deps.autorun(function(){
activeDep.depend();
Meteor.subscribe('items', new Date().getTime());
});
サーバ:
Meteor.publish('items', function(timestamp) {
var t = timestamp;
return Item.find({categoryId: Categories.find({active: true} });
});