1

我有一个模型模型/人

{

  firstName: DS.attr( 'string'),
  lastName: DS.attr( 'string'),
  email: DS.attr( 'string' ),
}

和另一个模型模型/项目

{

  name:            DS.attr( 'string' ),
  code:            DS.attr( 'string' ),
  startDate:       DS.attr( 'date' ),
  endDate:         DS.attr( 'date' ),
  users : DS.hasMany('person', {async: true}),

}

然后我将所有项目作为包含 ember 对象的数组检索。因为项目 -> 用户是异步的,所以它是一个承诺。我想使用该人的名字对该数组进行排序。当数据相应到达并重新渲染正在使用列表的 hbs

我有一个名为的计算属性

renderProjects = computed ('model.projects.[]')
{
 // trying to sort in here but data is not avaiable so its not getting sorted
}
4

2 回答 2

3

解决方案是简单地使用.@each

renderProjects: computed ('model.projects.@each.firstName', function() {
  return this.users.sortBy('firstName');
})

renderProjects每当项目列表更改或任何项目更改时,这将重新计算CP firstName,然后自动更新您的视图。

一个重要通知:你不能这样做.@each.foo.bar。这就是你在玩弄.model.@each.myUser.name

在您的旋转中,最简单的解决方法是将 a 添加computed.aliasvideo模型中:

username: computed.alias('myUser.name'),

然后你可以这样做:

sortedVideos: computed('model.@each.username', function() {
  return this.get('model').sortBy('username');
})

这是一个固定的旋转

于 2018-11-22T10:20:44.790 回答
0

我将实现一个观察者,它监视项目数组。在观察者内部,我将随后解决用户关系对项目数组进行排序。

请查看以下代码片段。

  modelObserver: observer('model.[]', function() {
    let userPromises = this.get('model').map(project => project.get('users'));
    RSVP.all(userPromises).then(function() {
      this.set('sortedProjects', this.get('model').sortBy('users.firstObject.name'));
    }.bind(this));
  })
于 2018-11-22T08:10:52.007 回答