以 ember 方式对 parent 的模型进行排序

Sorting parent's model the ember way

在简单、标准的 ember.js 路线中...

  this.resource('foo', function () {
      this.route('show');
      this.route('new');
  });

我有一个显示新按钮(link 到 foo/new 路由)和 foo foo.bar 数据的 foo 模板52=](使用 foo 控制器以 link 到 foo/show 的排序方式)

import Ember from 'ember';
export default Ember.Controller.extend({
    sortProperties: [ 'bar:desc' ],
    sortedList: Ember.computed.sort('model', 'sortProperties')
});

路由 foo/showfoo/new 很明显,没什么特别的。

我不需要也不想要 "real" foo/index 路线,因为 foo 路线和模板满足了我所有的导航需求。因此,我想 transitionTofoo/index 进入第一条路线(如上面的排序所示) foo/show 路线(或者 foo\new 如果没有什么显示)。

我了解到 "the ember way" 是要 transitionTo 离开航线,但永远不会离开控制器。

现在,我的问题是,我可以很容易地访问未排序的数据(这是我的 parent 路由的模型,我可以通过 modelFor 访问)并且我可以对其进行排序"manually",但我宁愿使用我的 parent 控制器中已经排序的数据。现在,我有点不知道在路由中使用哪个挂钩来确保我的 parent 路由的控制器的计算属性已准备就绪 - 但感觉不对。那么,ember 的方法是什么?

编辑:Non-working 示例 http://emberjs.jsbin.com/hujoxigami/2/edit?html,js,output ...

使用您在其中一条评论中提到的 afterModel 挂钩。

App.FooIndexRoute = Ember.Route.extend({
  afterModel: function(posts, transition) {
    if (posts.get('length') > 0) {
      this.transitionTo('foo.show', posts.get('firstObject'));
    }
}

在 return 从 FooRoute 之前对模型进行排序没有任何问题。 (如果你能收到已经从你的 API/data 存储中排序的它就更好了)

App.FooRoute = Ember.Route.extend({
  model: function() {
    // not fully functional, just illustrative
    return [{id:1, name:"Hans", detail:"german"},
            {id:3, name:"Henri", detail:"french"},
            {id:2, name:"Harry", detail:"english"}].sortBy('name');
  }
});

如果您想为用户提供排序控件,控制器中的排序属性仍然相关。