新记录出现在表格底部?

时间:2018-02-14 06:51:45

标签: javascript meteor

我有一个使用以下代码在表格中显示记录的流星应用程序:

Template.records.helpers({
  trackingData: function() {
    return Tracking.find({},{$sort: {fullDate: -1}})
  }
})

<table>
  ...
  {{#each trackingData}}
     <tr class="record" id="{{_id._str}}">
     ...
  {{/each}}
  ...
</table>

Meteor.publish('tracking', function(filter, offset) {
    var records = Tracking.find(filter,{
      sort: {fullDate: -1}, 
      limit:10, 
      skip: offset*10
    });
    return records
  });

出于某种原因,当我的新记录被添加时,它总是显示在表格的底部。根据我的排序,新记录应显示在最顶层。奇怪的是,当我刷新页面时,记录保持在底部当我停止我的应用程序并重新启动它时 - 记录显示在顶部,就像它应该的那样。我可能会遗漏哪些会导致这种奇怪的排序行为?

1 个答案:

答案 0 :(得分:1)

您可能希望使用Tracker.flush()或类似内容:

  

通常,当您进行更改(如写入数据库)时,它们的影响(如更新DOM)会延迟,直到系统处于空闲状态。这样可以保持可预测的状态 - 您可以知道DOM在运行时不会从代码中更改。这也是使Meteor快速发展的原因之一。

     

Tracker.flush强制完成所有待处理的响应式更新。例如,如果事件处理程序更改会导致部分用户界面重新呈现的Session变量,则处理程序可以调用flush以立即执行重新呈现,然后访问生成的DOM

基本上,Collection.find操作返回一般只计算一次的游标。

该主题也由this blog涵盖:

  

将文档发布到客户端时,它们将与其他文档合并   来自同一集合的文档并重新排列为内存中的文档   数据存储称为minimongo。关键词是重新安排的。

     

许多新的流星开发者都拥有已公布数据的心智模型   存在于有序列表中。这导致了类似的问题:“我   以排序的顺序发布我的数据,为什么不以这种方式出现   在客户端?“这是预期的。有一个简单的规则要遵循:

     

如果您需要在客户端上订购文档,请对其进行排序   客户端。通常不需要在发布函数中进行排序   除非排序结果改变了哪些文件被发送(例如   你正在使用限制。)

     

但是,您可能希望保留服务器端排序   数据传输时间很长。想象一下发布几个   一百个博客帖子,但最初只显示最近的十个。在   在这种情况下,让最新的文档首先到达客户端   将有助于最小化模板渲染的数量。