我构建了我的第一个 Meteor 应用程序,我喜欢它。除了,现在它有真实的生产数据,它有点慢。我收到报告说“当我单击此按钮时没有发生任何事情”。
有没有办法在模板重绘期间显示加载消息,以便用户知道发生了什么事?
为了进一步说明,请查看此模板(不是我的实际代码,仅为简单起见):
Template.all_posts.posts = function() {
return Posts.find({'category_id': Session.get('current_category')});
}
因此,如果打开我的控制台并运行Session.set('current_category', 1)
,假设运行计算和重绘模板需要 2 秒。我想在那 2 秒内显示一个加载指示器。
需要明确的是,我已经知道如何显示加载指示器。事实上,我已经在初始页面加载时执行此操作,并在我所有订阅为ready()
. 我只是想知道在哪里应用相同的逻辑(显示和隐藏加载图标),以便每次重绘模板时都会发生这种情况。伪代码可以正常工作:
简而言之,当 Meteor 忙时,我想反映这一点。
任何帮助是极大的赞赏!
2013 年 10 月 9 日编辑:
从文档...
这些 Meteor 函数将您的代码作为响应式计算运行:
- 模板
- Meteor.render 和 Meteor.renderList
- 自动运行
我认为一种可能的解决方案可以从在这些“计算”中的任何一个无效时显示加载指示器开始。
例如,如果您的代码在 内部运行Deps.autorun
,则计算实例作为第一个参数传递,您可以将回调传递给它的onInvalidate
方法,如下所示:
Deps.autorun(function(computation) {
// do reactive stuff
computation.onInvalidate(function() {
// display loading indicator
});
});
但是,据我所知,您不能在其他 Meteor 方法中访问计算对象,只有Deps.autorun
.
至于隐藏加载指示器,我认为最好的办法是在最后一个模板的rendered
回调中进行,因为计算无效而被(重新)渲染。
有人对此有任何见解、建议、技巧、技巧等吗?