在我的meteor应用程序中,我正在进行无限滚动,因此我必须对我的订阅设置限制才能实现此目的,但我还需要显示同一个集合的总计数并在计数更改时更新它。我将如何实现这一目标?
我有一个部分解决方案可以实现此目的,但只返回分页计数,如下所示:
function getTotalCount(system) {
var user = Meteor.user(),
queryObject = getSystemQueryObject(system);
if (queryObject) {
var query = queryObject.find({$and: [
{user: user.username},
{status: {$nin: status_complete}}
]});
var count = 0;
var handle = query.observeChanges({
added: function (id, user) {
$('#' + system + 'Count').text(++count);
$('#' + system + 'Count').addClass("ma-count-badge");
console.log(system + " count incremented: " + count);
},
removed: function () {
$('#' + system + 'Count').text(--count);
$('#' + system + 'Count').addClass("ma-count-badge");
console.log(system + " count decremented: " + count);
}
});
}
else {
return 0;
}
}
另一种方法是将此方法作为服务器方法推送到服务器,但是它不是被动的,如下所示:
Meteor.call('getSystemsTotalCount', system, function (err, counted) {
if (err) {
throw err;
}
if (counted > 0) {
$('#' + system + 'Count').text(counted);
$('#' + system + 'Count').addClass("ma-count-badge");
}
Session.get('listLimit');
});
}
答案 0 :(得分:0)
您可以通过以下方式获取计数
var count= queryObject.find({$and: [
{user: user.username},
{status: {$nin: status_complete}}
]}).count();
之后,您可以保存在会话中
Session('countCollection',count);
如果集合改变了你的会话,那么它也会
答案 1 :(得分:0)
所以诀窍真的是结合我在问题中的两个选项。第一部分增加了对添加/删除的反应性,第二部分调用服务器来获得总计数。现在我的代码看起来像:
query.observeChanges({
added: function(id, user) { updateListCount(system);},
removed: function(id) { updateListCount(system);}
});
我只是使用上面调用的一个名为Method.call
的函数从上面的第二个摘录中包装updateListCount
。这解决了这个问题。