我有以下模板:
<template name="datatable">
<table class="table table-hover">
<thead>
<tr>
<th>Path</th>
<th>Average</th>
</tr>
</thead>
<tbody>
{{#each entries}}
<tr>
<td>{{path}}</td>
<td>{{avg}}</td>
</tr>
{{/each}}
</tbody>
</table>
</template>
条目填充为:
Template.datatable.entries = ->
Metrics.find( { metric: 'mean' }, { fields: { path: 1, avg: 1 }, sort: { avg: -1 }, limit: 10 })
两个问题:
1)当我刷新页面时,我可以看到表格行快速变化,直到它显示10的排序列表。就像客户端正在接收所有数据并显示和排序它一样。我想我会得到的是客户端只从服务器接收10行。
2)当服务器更新集合时,客户端会冻结,直到服务器完成更新。
我如何解决这两个问题?
答案 0 :(得分:2)
你是部分正确的。客户端正在处理来自服务器的数据。但是,当您拨打find
但是调用subscribe
时,则不会发生这种情况。刷新页面时,将创建与服务器的新连接以及新订阅。您可以使用订阅的ready()
等待初始数据到达。见docs。如果您不想自己处理订阅状态,IronRouter
有一种等待数据到达的内置方式(如果使用路由器不是一种过度杀伤)
听起来很奇怪。在服务器将数据发送到客户端之前,客户端无法告知服务器正在更新。当发生这种情况时,您应该体验#1中的行为。我猜你要么向客户端发送太多数据需要时间来排序,要么你正在更新大块的数据。更多细节或实例可能有所帮助。