Ember从另一个控制器中对来自ember-data模型关联的数据进行排序

时间:2014-06-11 21:23:49

标签: javascript sorting ember.js ember-data handlebars.js

我有一个jsbin:http://jsbin.com/watab/6/

这是我最终目标的简化版本。基本上我需要在hasMany关联中排序数据。

如果用户有多个图书,我想要对图书进行排序以便显示{{#each book in books}},那么我该如何对它们进行排序?

我正在做的是setupController期间的用户路线我设置了图书控制器的内容。

this.controllerFor('books').set('content', model.get('books'));

现在在Users控制器中我设置了课程的需求

needs: ['books']

并设置别名

books: Ember.computed.alias('controllers.books.content')

现在我有书籍控制器

App.BooksController = Ember.ArrayController.extend({
  sortProperties: ['name'],
  sortAscending: false
});

然而,当我执行{{#each book in books}}时,它永远不会被排序。

jsbin http://jsbin.com/watab/6/并不是我所描述的,但它采用了我在此描述的基本思想。

除了我将sortAscending更改为true之外,这与jsbin http://jsbin.com/watab/7/相同。我得到了相同的结果......

谢谢!

1 个答案:

答案 0 :(得分:1)

好的,当你在'指数'中时,以http://jsbin.com/watab/6/为例,举出JSBin的例子。模板,你当前的控制器是' IndexController',没关系。在那个控制器中,你有一个属性'用户',这很好;但是,即使你在UsersController中定义了排序选项,该属性也没有排序,该属性不会被排序,为什么?,控制器是你的模型的装饰器,所以,你放的代码每当你去“用户”时,排序都会有效。然后,用户将在那里进行排序,这就是为什么它不能在你的“IndexController”中工作,因为数据没有排序。要对它进行排序,有几种方法,但我喜欢这个,在你的IndexController'中添加这些属性:

userSortProperties: ['name:desc'],
sortedUsers: Ember.computed.sort('users', 'userSortProperties')

并将模板更改为:

{{#each user in sortedUsers}}
  <div>{{user.name}}</div>
{{/each}}

我希望你明白这一点。