Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 排序父项';s以余烬方式建模_Ember.js - Fatal编程技术网

Ember.js 排序父项';s以余烬方式建模

Ember.js 排序父项';s以余烬方式建模,ember.js,Ember.js,在一个简单、标准的ember.js路径中 this.resource('foo', function () { this.route('show'); this.route('new'); }); 我有一个foo模板,显示一个新按钮(链接到foo/new路径)和foo对象的foo.bar数据(使用foo控制器以排序方式链接到foo/show) 路线foo/show和foo/new做的很明显,没有什么特别之处 我不需要或不想要“真实”的foo/index路线,因为

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

  this.resource('foo', function () {
      this.route('show');
      this.route('new');
  });
我有一个
foo
模板,显示一个新按钮(链接到
foo/new
路径)和
foo
对象的
foo.bar
数据(使用
foo
控制器以排序方式链接到
foo/show

路线
foo/show
foo/new
做的很明显,没有什么特别之处

我不需要或不想要“真实”的
foo/index
路线,因为
foo
路线和模板满足了我所有的导航需求。因此,每当我输入到第一个路由时(如上面的排序所示)
foo/show
路由(或者如果没有任何显示,则
foo\new
),我想从
foo/index
转换到

我了解到“余烬之路”是
转换到
路线之外,但永远不要离开控制器

现在,我的问题是,我可以很容易地访问未排序的数据(这是我父路由的模型,我可以通过
modelFor
)访问),我可以“手动”对其进行排序,但我宁愿使用来自父级控制器的已排序数据。现在,我有点不知道该在路由中使用哪个钩子来确保父路由的控制器的计算属性已经准备好了——而且感觉不对劲。那么,余烬是如何做到这一点的呢


编辑:非工作示例在…

使用您在评论中提到的
afterModel
挂钩

App.FooIndexRoute = Ember.Route.extend({
  afterModel: function(posts, transition) {
    if (posts.get('length') > 0) {
      this.transitionTo('foo.show', posts.get('firstObject'));
    }
}
在从
foodroute
返回模型之前,对模型进行排序并没有什么错。(如果您可以从API/数据存储中接收已排序的数据,则更好)


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

:)我添加了一个jsbin。如何从FooIndexRoute转换到排序后的第一个foo对象。我可以自己在模型上实现排序,但在我看来,这并不是惯用的余烬;我宁愿重复使用现有的排序定义。但是现在还没有。谢谢你帮我睁开眼睛。工作示例(删除描述):我缺少的是(a)控制器排序功能针对用户控件的使用,(b)模型挂钩中的排序就这么简单。
App.FooIndexRoute = Ember.Route.extend({
  afterModel: function(posts, transition) {
    if (posts.get('length') > 0) {
      this.transitionTo('foo.show', posts.get('firstObject'));
    }
}
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');
  }
});