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。谢谢你的提示!这管用!谢谢我想我可能需要创建一个东西来检查是否所有数据都已插入。。。否则,它将始终搜索所有照片,即使它们可能已经在商店中