在DOM初始化之后加载数据时显示加载程序

时间:2012-12-06 06:58:17

标签: meteor

当在服务器上部署流星应用程序时,从mongodb获取数据需要相当长的时间(3-4秒)。在我的应用程序中,我有一个通过#each块帮助程序绑定到数据的模板。

{{#each items}}
    {{> item_info}}
{{else}}
    No items yet.
{{/each}}

因此,当应用加载新的浏览器会话时,用户会看到消息No items yet,直到数据加载完毕为止。当数据可用时,该消息将被实际数据替换。但是这会导致糟糕的用户体验,因为有些用户实际上认为,在3-4秒内他们丢失了数据。

我的问题是 - 是否可以在提取数据时将“其他”消息更改为“正在加载...”?或者这个问题有更优雅的解决方案吗?

感谢。

1 个答案:

答案 0 :(得分:5)

我认为您应该在Session

中使用onComplete() Meteor.subscribe()函数

这将在订阅完成时自动执行,即您在客户端上加载完成集合。

对于Eg。

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>