对父母的模型进行排序

时间:2015-03-23 16:23:59

标签: ember.js

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

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

我有一个foo模板,其中显示了一个新按钮(指向foo/new路线的链接)和foo.bar对象的foo数据(包含指向{{1的链接)使用foo/show控制器的排序方式)

foo

路线import Ember from 'ember'; export default Ember.Controller.extend({ sortProperties: [ 'bar:desc' ], sortedList: Ember.computed.sort('model', 'sortProperties') }); foo/show做的很明显,没什么特别的。

我不需要或想要一个真实的" foo/new路由,因为foo/index路由和模板中的所有导航需求均已满足。因此,每当我进入第一条路线(如上面的排序所示)foo路线时(或transitionTo,如果没有任何内容,我希望foo/indexfoo/show foo\new显示)。

我已经了解到"余烬的方式"是transitionTo离开路线,但永远不会离开控制器。

现在,我的问题是,我可以非常轻松地访问未分类的数据(它是我父路线的模型,我可以通过modelFor访问)并且我可以对此进行排序&# 34;手动",但我宁愿使用来自父母控制器的已排序数据。现在,我有点不知所措,在路线中使用钩子以确保我的父路线控制器的计算属性准备就绪 - 它感觉不对。那么,这样做的余烬是什么?

编辑:http://emberjs.jsbin.com/hujoxigami/2/edit?html,js,output的非工作示例...

1 个答案:

答案 0 :(得分:0)

在你的一条评论中使用afterModel挂钩。

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

在从FooRoute返回模型之前对模型进行排序没有任何问题。 (如果您已经从API /数据存储中分类收到它,那就更好了)

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');
  }
});

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