如果我更改Session
var 并通过触发重新订阅autosubscribe
,是否有任何回调机制等到“最新”数据从服务器关闭?[1]
如果你看一下这个要点,你会看到一些代码随着订阅的变化记录集合的内容。输出的相关部分:
at Subscribed; comments are: first post on #1 - second post on #1
at Flushed; comments are: first post on #1 - second post on #1
at Subscription complete; comments are: first post on #1 - second post on #1 - first post on #2 - second post on #2
因此,即使在 (a) 调用.subscribe
, (b) 调用Meteor.flush
(c)之后在;的onReady
回调中 .subscribe
集合中仍然有陈旧的数据,只有在第三种情况下才是“正确”的数据。
我意识到响应式模板.observe
最终会接收到正确的数据,并且事情将“稳定”到正确的状态。但是有什么方法可以告诉我们我们还没有到达那里吗?
例如,大多数流星示例应用程序(以及我自己的应用程序)在从订阅的集合中添加和删除数据时都容易出现抖动(类似于 FOUC)。如果我们可以判断订阅正在“加载”,我们可以对此做一些事情。
[1] 显然,服务器上的数据在不断变化,但正如您将在要点中看到的那样,我无法(没有超时)找到它甚至正确的点。因此,我在问题中使用了“有效”。
一个非常简单和常见的用例
使用 makewith 应用程序;当您第一次加载它时,似乎没有注册任何应用程序,直到数据通过网络传输并且应用程序突然出现。
这样做的原因是Meteor.subscribe
已调用,但数据尚未传出。但是模板没有简单的方法来告诉数据是待处理的并且它应该显示一个“加载”模板。在madewith中,它们实际上在数据加载时会做一些事情,但这是一个回调,因此打破了正常的meteor做事方式(即反应式编码)。
能够编写如下内容会更好(IMO):
{{unless apps_loaded}}{{> loading}}{{/unless}}
和
Template.madewith.apps_loaded = function() { return !Apps.isComplete(); }