首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在DOM初始化后加载数据时显示加载器

在DOM初始化后加载数据时显示加载器
EN

Stack Overflow用户
提问于 2012-12-06 14:58:17
回答 1查看 1.1K关注 0票数 2

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

代码语言:javascript
运行
复制
{{#each items}}
    {{> item_info}}
{{else}}
    No items yet.
{{/each}}

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

我的问题是--是否可以将"else“消息更改为类似于”正在加载...“当数据被获取的时候?或者有一个更优雅的解决方案来解决这个问题?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-06 17:14:55

我认为您应该在Meteor.subscribe()中使用带有onComplete()函数的Session

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

例如。

代码语言:javascript
运行
复制
Meteor.subscribe('yourCollection', function onComplete(){

         // set a session to true indicating your collection is loaded.
         Session.set('itemsLoaded', true);
});

然后根据会话值调用模板帮助器,如下所示:

代码语言:javascript
运行
复制
Template.yourTemplate.isLoaded = function(){

     return Session.get('itemsLoaded'); 
}

您的html将如下所示:

代码语言:javascript
运行
复制
<template name="yourTemplate">
    {{#if isLoaded}}
        {{#each items}}
          {{> item_info}}
        {{/each}}
    {{/if}}

    {{#unless items}}
         <img src="images/loader.gif">
    {{/unless}}
</template>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13738483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档