在服务器上部署meteor应用时,从mongodb获取数据需要相当长的时间(3-4秒)。在我的应用程序中,我有一个通过#each block helper绑定到数据的模板。
{{#each items}}
{{> item_info}}
{{else}}
No items yet.
{{/each}}
因此,当应用程序在新的浏览器会话中加载时,用户会看到消息No items yet
,直到数据加载完成。当数据可用时,该消息将替换为实际数据。但这会导致糟糕的用户体验,因为一些用户实际上认为,在这3-4秒内,他们已经丢失了数据。
我的问题是--是否可以将"else“消息更改为类似于”正在加载...“当数据被获取的时候?或者有一个更优雅的解决方案来解决这个问题?
谢谢。
发布于 2012-12-06 17:14:55
我认为您应该在Meteor.subscribe()
中使用带有onComplete()
函数的Session
这将在订阅完成时自动执行,也就是说,您的收藏已完成加载到客户端。
例如。
Meteor.subscribe('yourCollection', function onComplete(){
// set a session to true indicating your collection is loaded.
Session.set('itemsLoaded', true);
});
然后根据会话值调用模板帮助器,如下所示:
Template.yourTemplate.isLoaded = function(){
return Session.get('itemsLoaded');
}
您的html将如下所示:
<template name="yourTemplate">
{{#if isLoaded}}
{{#each items}}
{{> item_info}}
{{/each}}
{{/if}}
{{#unless items}}
<img src="images/loader.gif">
{{/unless}}
</template>
https://stackoverflow.com/questions/13738483
复制相似问题