【问题标题】:Meteor collection updated from server, not getting sorted reactively on client流星集合从服务器更新,没有在客户端反应排序
【发布时间】:2016-02-24 14:41:37
【问题描述】:

在我的流星项目中,我有一个集合,我在其中放置了一些日志,并且我想在客户端上显示来自服务器的最新添加的日志,总是在列表中的第一位。

我的日志集合订阅在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 排序,但是如果我更新页面,我看到日志集合按预期排序。

像这样:

页面重新加载之前:

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

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

【问题讨论】:

    标签: javascript node.js mongodb meteor


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-10
      • 2015-03-18
      • 1970-01-01
      • 2014-09-13
      • 2013-03-18
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多