Ember.js 排序父项';s以余烬方式建模
在一个简单、标准的ember.js路径中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路线,因为
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');
}
});