【问题标题】:How to display a loading template in Ember while model is being loaded?加载模型时如何在 Ember 中显示加载模板?
【发布时间】:2016-02-24 00:22:48
【问题描述】:

我想在加载下一个模板之前在 Ember 中渲染一个加载模板。现在我有一个应用程序路由的加载模板,如果用户直接导航到 URL,它就可以正常工作。但是,如果用户从应用程序的另一个页面中单击 link-to 到该页面,我希望显示相同的模板。如何才能做到这一点?

调度afterRender 不起作用,因为页面还没有“加载”(现在它只是在下一页加载时在前一页停留几秒钟;但是使用 afterRender 会导致同样的事情加载后,您可以在加载 div 淡出之前简要瞥见它:显然不是预期的行为)。

如何改为显示加载模板?

减少加载时间不是一种选择,我们会进行一些非常繁重的计算。

编辑:我确实相信我的问题与建议的重复问题不同,因为我希望所有路由都具有相同的加载模板,而默认加载模板结构不提供。 “旧版”LoadingRoute 解决方案不再适用,因为最新版本的 Ember 已弃用视图。

【问题讨论】:

标签: javascript templates ember.js ember-cli


【解决方案1】:

据我了解,Ember.js loading substates 正是您所需要的,尤其是指南的这一部分:

app/router.js

Router.map(function() {
  this.route('foo', function() {
    this.route('bar', function() {
      this.route('slow-model');
    });
  });
});

Ember 将交替尝试从第一个模板开始在层次结构中查找 routeName-loading 或 loading 模板:

  • foo.bar.slow-model-loading

  • foo.bar.loadingfoo.bar-loading

  • foo.loadingfoo-loading

  • loadingapplication-loading(您已经实现)

我建议您删除 afterRender(),因为我不知道它是否会干扰触发加​​载事件。如果指南不提供解决方案,您可以发布一个 jsfiddle 吗? Ember.js 可能会变得很挑剔,具体取决于您实现插座的方式......

您可以分叉我为另一个问题创建的example,以快速设置您的 JSFiddle 以使用 Ember.js

【讨论】:

  • 问题是我想对所有路由使用相同的加载模板。当然,我可以复制一个并将其制作成一堆不同的文件,但这似乎不优雅,我觉得必须有一种方法可以以编程方式完成。
  • 好的,所以我确实实现了一个应用程序级加载路由,但是我观察到它没有显示在应用程序的路由之间,只有在完全刷新时才显示。我推断模板没有正确“冒泡”,并且仅在应用程序级加载事件中显示。
  • 这个问题也在试图找出为什么它没有冒泡(stackoverflow.com/questions/34889107/…
  • 你也可以推断出在 Ember.js Github 上打开的 issue #13267。 github.com/emberjs/ember.js/issues/12367 如果这些资源对您没有帮助,请分享您的路由器路由或创建 JSFiddle。
  • 可以,但通常(例如模板)它是 CoC 但是如果你想自定义你可以类型的东西。首先喜欢 CoC,但如果需要,可以进行更多控制。我不明白为什么加载模板不订阅 Ember 中的这种通用结构。对我来说有点太“神奇”了(到目前为止,Ember 中没有任何东西真正适合我)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
相关资源
最近更新 更多