Javascript Ember未调用路由器的setupController
所以,我的路线上有两条路。我创建了两条路线作为第一条路线 我的路由器如下所示:Javascript Ember未调用路由器的setupController,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,所以,我的路线上有两条路。我创建了两条路线作为第一条路线 我的路由器如下所示: // router.js Router.map(function() { this.route('photos'); this.route('photo', { path: '/photo/:photo_id' }); }); 如果我先访问路径/photo/ID,然后转到/photos,则在后者上只显示一个对象。(错误) 如果我先访问/photos,它会显示所有对象,我可以稍后转到/photo/ID,这样就
// router.js
Router.map(function() {
this.route('photos');
this.route('photo', { path: '/photo/:photo_id' });
});
如果我先访问路径/photo/ID,然后转到/photos,则在后者上只显示一个对象。(错误)
如果我先访问/photos,它会显示所有对象,我可以稍后转到/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')]);
}
}
findAll
将从存储中获取它并立即返回,稍后它将请求服务器并更新存储。但在您的情况下,由于您没有使用路由模型挂钩,因此此活动数组将不会更新,因此不会在模板中反映它
如果我先访问路线/photo/ID,然后再访问/photos,它将
仅在后者上显示一个对象
在上述情况下,存储区将只包含一个reocrd,因此当您使用findAll
请求存储区数据时,它将返回现有的单个记录
另一个选项是,避免使用此
photos.toArray()
-它将中断实时阵列更新,我不确定您为什么需要它。因为photos
是DS.RecordArray
注意:需要注意的是DS.RecordArray不是JavaScript
数组,它是一个实现Ember.Enumerable的对象。这是
很重要,因为,例如,如果您想通过
索引时,[]符号将不起作用--您必须使用
objectAt(索引)代替
您如何调用链接进行转换?。如果您提供
模型
或任何对象,那么它将不会调用模型挂钩和设置控制器挂钩,我不确定。我会试试你可以试试let photos=this.get('store').findAll('photo',{reload:true})
。这将等待服务器返回数据并在存储中进行更新,然后它将其设置为photos
property我不是经验最丰富的余烬开发人员,但是为什么要在setupController
内的变量中设置photos
,将其与模型一起返回不是更好吗?我现在正在这样做,@Cameron。谢谢你的提示!这管用!谢谢我想我可能需要创建一个东西来检查是否所有数据都已插入。。。否则,它将始终搜索所有照片,即使它们可能已经在商店中