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