Ember 加载模板仅适用于页面刷新
Ember loading template works only on page refresh
我的 Ember 应用程序中有这条路线:
Router.map(function() {
// landing page (login/register)
this.route('home', {path: '/'});
// authenticated pages
this.route('webappFrame', {path: '/app'}, function() {
this.route('feed', {path: 'feed'});
this.route('photoDetail', {path: 'photo/detail/:id'});
});
});
其中 "feed" 和 "photoDetail" 都有一个模型挂钩 return 一个承诺(来自服务器的记录);
我在 /template 文件夹中有一个 loading.hbs 模板;
"feed"和"photoDetail"路由页面刷新后,加载模板正确显示;
但是在路线之间导航时,它不会再次显示(出口保持白色,直到承诺得到解决);
我使用 ember-cli 2.3.0-beta.1(但也尝试过 1.13.14 稳定版)和 ember 2.3.0;
在官方 ember 文档中写道,它应该始终遍历模板树,直到找到加载模板;
谁能告诉我这里出了什么问题?
更新------------------------------------ --------------
// feed model hook
model: function(params, transition) {
return this.store.query('photo', {type: 'feed'});
}
// photoDetail model hook
model: function(params, transition) {
var self = this;
return Ember.RSVP.hash({
photo: self.store.find('photo', params.id),
comments: self.store.query('comment', {id: params.id})
});
},
在 Feed 模板中:
{{#each photo as |item|}}
{{photo-item item=item}}
{{/each}}
然后是照片项目组件:
{{#link-to "webappFrame.photoDetail" item.id}}
<img class="photoImage" src="{{imageurl item.hash type='photo'}}">
{{/link-to}}
其中 {{imageurl}} 只是创建图像路径的助手;
在这里,我将 "item.id" 传递给 link-to(而不是传递 "item" 本身)以在输入详细信息时强制重新加载照片(以便同时获得评论)
现在,我添加了 templates/webapp-frame/loading.hbs 并且它起作用了;
问题是加载模板在整个应用程序中始终相同;所以我希望只有一个而不是在每个 /templates 子文件夹中都有它的副本...
Ember 处理每条路线的加载模板,它总是 "routename-loading.hbs",看来你还没有创建匹配的模板,这就是为什么你只看到一个白页(默认)。如果您不确定哪些模板是必需的或它们必须如何命名,请安装 ember 检查器并检查路由选项卡,在那里您可以看到 ember 期望的内容以及应该如何命名。
我的 Ember 应用程序中有这条路线:
Router.map(function() {
// landing page (login/register)
this.route('home', {path: '/'});
// authenticated pages
this.route('webappFrame', {path: '/app'}, function() {
this.route('feed', {path: 'feed'});
this.route('photoDetail', {path: 'photo/detail/:id'});
});
});
其中 "feed" 和 "photoDetail" 都有一个模型挂钩 return 一个承诺(来自服务器的记录); 我在 /template 文件夹中有一个 loading.hbs 模板;
"feed"和"photoDetail"路由页面刷新后,加载模板正确显示; 但是在路线之间导航时,它不会再次显示(出口保持白色,直到承诺得到解决);
我使用 ember-cli 2.3.0-beta.1(但也尝试过 1.13.14 稳定版)和 ember 2.3.0; 在官方 ember 文档中写道,它应该始终遍历模板树,直到找到加载模板; 谁能告诉我这里出了什么问题?
更新------------------------------------ --------------
// feed model hook
model: function(params, transition) {
return this.store.query('photo', {type: 'feed'});
}
// photoDetail model hook
model: function(params, transition) {
var self = this;
return Ember.RSVP.hash({
photo: self.store.find('photo', params.id),
comments: self.store.query('comment', {id: params.id})
});
},
在 Feed 模板中:
{{#each photo as |item|}}
{{photo-item item=item}}
{{/each}}
然后是照片项目组件:
{{#link-to "webappFrame.photoDetail" item.id}}
<img class="photoImage" src="{{imageurl item.hash type='photo'}}">
{{/link-to}}
其中 {{imageurl}} 只是创建图像路径的助手; 在这里,我将 "item.id" 传递给 link-to(而不是传递 "item" 本身)以在输入详细信息时强制重新加载照片(以便同时获得评论)
现在,我添加了 templates/webapp-frame/loading.hbs 并且它起作用了; 问题是加载模板在整个应用程序中始终相同;所以我希望只有一个而不是在每个 /templates 子文件夹中都有它的副本...
Ember 处理每条路线的加载模板,它总是 "routename-loading.hbs",看来你还没有创建匹配的模板,这就是为什么你只看到一个白页(默认)。如果您不确定哪些模板是必需的或它们必须如何命名,请安装 ember 检查器并检查路由选项卡,在那里您可以看到 ember 期望的内容以及应该如何命名。