我试图绕着Ember的装载子状态。根据指南......
http://emberjs.com/guides/routing/loading-and-error-substates/
...加载子状态将在模型解析时显示,如果当前路径不存在加载模板,它将爬上路径层次结构,直到找到“#loading”# 39;模板。所以我定义了一个' loading'模板,但它并不总是显示。
这是一个例子:
http://emberjs.jsbin.com/junop/2
首先,当页面加载时,即使正在解析ApplicationRoute模型,加载模板也不会显示。然后,如果您转到“书籍”,则会显示加载模板。所以来自'指数'到书#39;将始终显示加载模板。但是他们会去找一本特定的书#39; (例如我的例子中的三只小猪)没有显示加载模板。最后,去预订'来自'书籍'没有显示加载模板,即使你来自索引'到书#39;我无法理解所有这一切。 Ember使用什么逻辑来爬层次以显示加载模板?
答案 0 :(得分:4)
与加载有两个不同的事情。装载路线与装载动作。
每个具有至少一个子项的资源(包括根,也就是应用程序路由)都有一个加载路径。除非父资源已经渲染,否则Ember不会点击加载路线。这意味着它对第一次加载不太有用,对转换更有用。
http://jsbin.com/cajivava/5/edit
不用担心,有加载动作!每次模型钩子需要一些时间来解决时,它会向该路径发送一个动作,该路径将遍历路由器直到被处理(或者如果你处理它,然后返回true,它将把它发送到树上)。这对于神奇的装载或第一次装载非常有用。请记住(我在这个例子中展示了它,如果你不处理特定路线上的加载动作,它将被传递给应用程序)。
http://jsbin.com/cajivava/6/edit
现在你可以将它破解到应用程序路径中的不同位置,因为它是一个只能加载一次的特殊路径。如果您在开始时有一个长时间加载应用程序,那么两者的混合通常是最好的计划。
http://jsbin.com/cajivava/4/edit
从出口意义上考虑过渡是最容易的。要渲染的部分是停滞的,因此它将要渲染的出口转换到加载路径。一旦完成,它就会导航到书籍索引。
在下面的示例中,尝试点击奶牛。它是一个资源2深度和书籍立即解决(中间的资源),但过渡在奶牛停止,所以我们的出口,我们将把所有新的过渡渲染到加载路线。
http://jsbin.com/buyaxipowi/1/edit
在您自己的资源中存储的单个加载路径需要在您点击其加载路径之前解析资源本身: