为应用程序路由创建加载子状态

时间:2015-04-30 17:01:37

标签: ember.js

我正在尝试使用最近添加的new named substate options为Application路由创建一个加载子状态,但出于某种原因,我无法使其工作。最初,我刚刚创建了一个简单的模板loading.hbs,它自动运行,但由于应用程序路径上的子状态问题,我的一些UI仍然可见。我现在想纠正这个问题。

我尝试重命名并将模板移动到以下位置:

/templates/application_loading.hbs 
/templates/application-loading.hbs
/templates/application/loading.hbs

似乎没有工作。我不需要任何自定义路由行为,因此默认生成的路由应该为我做,除非它要求这个工作。有关此功能的文档似乎很少。我找到了jsbin for this feature,我应该按照它正确地做,除非ember-cli有一些问题。

感谢您的帮助。

DEBUG: -------------------------------
DEBUG: Ember      : 1.11.1
DEBUG: Ember Data : 1.0.0-beta.16.1
DEBUG: jQuery     : 1.11.2
DEBUG: -------------------------------

3 个答案:

答案 0 :(得分:1)

我认为loading.hbserror.hbs是应用程序的加载和错误子状态。你的application-loading.hbs对Ember不存在,这就是它无法正常工作的原因。

至于其他UI元素:我相信其余的application.hbs无论如何都会呈现,所以我唯一的建议是将所有这些元素嵌套到更深层次。这听起来像是一场严酷的考验,但实际上并没有那么糟糕:

router.js

this.resource('whatever', {path: '/'} function() {
  // All your existing routes
});

然后将application.hbs重命名为whatever.hbs并将application.hbs更改为只有{{outlet}}。在实践中,这应该真的改变很少,但它会使其余的UI元素不被渲染,直到加载完成。

答案 1 :(得分:1)

在加入赏金之前,确实应该谷歌。

显然,此功能为broken。虽然已经有fix,但只需要合并并发布。

答案 2 :(得分:0)

看起来你必须有一个moduleBasedResolver

https://github.com/emberjs/ember.js/blob/06e41ad7ccd28558dd4e651aa070bc06f7757821/packages/ember-application/lib/system/application-instance.js#L153

https://github.com/emberjs/ember.js/blob/b80d66f71d75ad0db9022438ed58a41ac84f45f5/packages/ember-routing/lib/system/router.js#L79

当我在ember-cli应用程序中查看此值时,它未定义。这似乎很奇怪,因为ember-cli是基于es6模块的。

然后我发现这个https://github.com/emberjs/ember.js/issues/10756看起来像是可以在moduleBasedResolver中添加路由应用程序加载或破解作为临时解决方案。

https://github.com/emberjs/ember.js/pull/10944 应该从长远来看解决这个问题。

看来你已经发现了这个,当我写这个答案时,它似乎没有加载。对不起噪音。