在简单的标准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/index
从foo/show
foo\new
显示)。
我已经了解到"余烬的方式"是transitionTo
离开路线,但永远不会离开控制器。
现在,我的问题是,我可以非常轻松地访问未分类的数据(它是我父路线的模型,我可以通过modelFor
访问)并且我可以对此进行排序&# 34;手动",但我宁愿使用来自父母控制器的已排序数据。现在,我有点不知所措,在路线中使用钩子以确保我的父路线控制器的计算属性准备就绪 - 它感觉不对。那么,这样做的余烬是什么?
编辑:http://emberjs.jsbin.com/hujoxigami/2/edit?html,js,output的非工作示例...
答案 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');
}
});
如果要为用户提供排序控件,控制器中的排序属性仍然相关。