【问题标题】:Sorting parent's model the ember way以 ember 方式对父模型进行排序
【发布时间】:2015-05-26 17:46:42
【问题描述】:

在一个简单、标准的 ember.js 路由中 ...

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

我有一个foo 模板,它显示了一个新按钮(链接到foo/new 路由)和foo 对象的foo.bar 数据(使用@987654329 以排序方式链接到foo/show @控制器)

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

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

我不需要也不想要“真正的”foo/index 路线,因为我的所有导航需求都在foo 路线和模板中得到了满足。因此,每当我输入到第一个路由(如上面排序给出的)foo/show 路由(或foo\new,如果没有什么可显示的)时,我想从foo/indextransitionTo

我了解到“余烬方式”是到transitionTo 的路线之外,但永远不会离开控制器。

现在,我的问题是,我可以很容易地访问未排序的数据(这是我的父路由的模型,我可以通过 modelFor 访问)并且我可以“手动”排序,但我会而是使用我父母控制器中已经排序的数据。现在,我有点不知道在路由中使用哪个钩子来确保我的父路由的控制器的计算属性已经准备好——而且感觉不对。那么,ember 的方法是什么?

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

【问题讨论】:

  • 我添加了一个 jsbin。如何从 FooIndexRoute 过渡到 sorted 第一个 foo 对象。我可以自己在模型上实现排序,但这对我来说似乎不是惯用的 ember;我宁愿重用现有的排序定义。但这目前不可用。

标签: ember.js


【解决方案1】:

使用您在其中一个 cmets 中提到的 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');
  }
});

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多