如何获取限制集的Meteor集合的总数?

时间:2014-09-17 00:09:10

标签: meteor

在我的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');
    });
    }

2 个答案:

答案 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。这解决了这个问题。