Meteor集合从服务器更新,而不是在客户端上被反应排序

时间:2016-02-24 05:41:29

标签: javascript node.js mongodb meteor

在我的流星项目中,我有一个集合,我在其中放置了一些日志,我想在客户端的服务器上始终首先显示最新添加的日志。

我的日志集合在autorun中订阅,以控制按限制加载的日志数量:

Template.statistics.onCreated(function(){
 instance.autorun(function () {

         var instance = this;

        instance.limitLogs = new ReactiveVar(20);
        instance.loadedLogs = new ReactiveVar(0);


        var limitLogs = instance.limitLogs.get();
        var subscriptionLogs = instance.subscribe("logs_list",limitLogs);


        // if subscription is ready, set limit to newLimit
        if (subscriptionLogs.ready()) {

            instance.loadedLogs.set(limitLogs);
        } else {
            console.log("> Subscription logs is not ready yet. \n\n");
        }

    });
    instance.getLogsList = function(){

        return logsList.find();
    };

});

Template.statistics.helpers({
     hasMoreLogs: function () {
     return Template.instance().getLogsList().count() >= Template.instance().limitLogs.get();
    } ,
    logs : function(){
           return Template.instance().getLogsList();

    }

});

在服务器上我有:

 Meteor.publish("logs_list",function(limit) {
        return  logsList.find({},{sort: {createdAt: -1}},{limit: limit});
    });

collection.js文件夹中的lib我有:

logsList = new Mongo.Collection('logsList');

所以我有一些服务器代码在JobCollection作为作业运行,从这个服务器方法我调用另一个在日志中插入数据的服务器方法:

Meteor.Methods({
 logTask : function(taskId,message,status){
            logsList.insert({
                    jobID : taskId,
                    message : message,
                    status : status,
                    createdAt : new Date()
                }
            );
        } 
});

//... somewhere in job worker
  Meteor.call("logTask", job._doc._id, "something", "failed");

每当我使用logTask服务器方法从该作业工作者插入日志时,我会在我的日志表中看到客户端上的新条目,但是如果我更新的话,它不会被createdAt,Hovewer排序在页面上,我看到日志集合按预期进行排序。

像这样:

页面重新加载前

message1    Wed Feb 24 2016 07:30:52 GMT+0200
message2    Wed Feb 24 2016 07:36:52 GMT+0200
页面重新加载后

message2    Wed Feb 24 2016 07:36:52 GMT+0200
message1    Wed Feb 24 2016 07:30:52 GMT+0200

是否应该在插入后以某种方式汇总集合以使其在客户端上重新排序?

1 个答案:

答案 0 :(得分:1)

您还需要在客户端上使用{},{sort: {createdAt: -1}}

instance.getLogsList = function(){
    return logsList.find({},{sort: {createdAt: -1}});
};

我认为,由于客户端已经拥有数据并且新数据已从服务器修补到客户端,因此在刷新之前会以这种方式对其进行排序。