所以,我的路线有两条路。我创建了两条路线doc recommends。
我的路由器如下:
// router.js
Router.map(function() {
this.route('photos');
this.route('photo', { path: '/photo/:photo_id' });
});
如果我首先访问路线/照片/ ID然后转到/照片,它将只显示后者的一个对象。 (的错)
如果我首先访问/照片它会显示所有对象,我可以稍后转到/ photo / ID,这样会很好。 (正确)
我想让它在两个方面都有效。这该怎么做?您可以在下面看到我的代码:
// photo.js
export default Ember.Route.extend({
model(params) {
return this.get('store').findRecord('photo', params.photo_id);
}
});
// photos.js
export default Ember.Route.extend({
setupController(controller, model) {
let photos = this.get('store').findAll('photo');
console.log('add all...');
// convert to an array so I can modify it later
photos.then(()=> {
controller.set('photos', photos.toArray());
});
},
});
无论用户去哪里,我都可以随时拨打findAll()
功能,但我不认为这很聪明。
我处理页面转换的方式:
要使用我使用的照片:
{{#link-to 'photos'}}All{{/link-to}}
转到/ photo / ID我注入服务' -routing'我在一个事件中使用点击这样:
routing: Ember.inject.service('-routing'),
actions() {
selectRow(row) {
this.get("routing").transitionTo('photo', [row.get('id')]);
}
}
答案 0 :(得分:2)
findAll
将从商店获取并立即返回,稍后它将请求服务器并更新商店。但在你的情况下,因为你没有使用路由模型钩子,所以这个实时数组不会被更新,所以它不会在模板中反映它。
如果我首先访问路线/照片/身份证然后转到/照片,它会 只显示后者的一个对象。
在上述情况下,商店将只包含一个reocrd,因此当您使用findAll
请求商店数据时,它将返回现有的单个记录。
另一个选择是,
避免这个photos.toArray()
- 它会打破实时数组更新,我不知道为什么你需要它。因为photos
是DS.RecordArray
。
注意:注意DS.RecordArray不是JavaScript非常重要 array,它是一个实现Ember.Enumerable的对象。这是 重要的是,例如,如果您想要通过检索记录 索引,[]表示法不起作用 - 你必须使用 objectAt(index)代替。