2

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

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

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

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

谢谢。

4

1 回答 1

5

我认为你应该在里面使用SessionwithonComplete()函数Meteor.subscribe()

这将在订阅完成时自动执行,即您的收藏已完成加载到客户端。

例如。

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>
于 2012-12-06T09:14:55.083 回答