上面的 jsfiddle 展示了一个简单的 ember.js 应用程序,它允许您
- 对您的内容进行分页
- 按列排序
- 通过键入过滤您的内容
分页路由 url 看起来像这样 /foo/#/page/2
排序路由 url 看起来像这样 /foo/#/sort/id
过滤路由 url 看起来像这样 /foo/#/search/text
TL;DR => 这是一个简单的 mixin,可以帮助您筛选在 ArrayController 中找到的大量数据
路线设置看起来像这样
PersonApp.Router.map(function(match) {
this.resource("person", { path: "/" }, function() {
this.route("page", { path: "/page/:page_id" });
this.route("search", { path: "/search/:page_term" });
this.route("sort", { path: "/sort/:page_column" });
});
});
PersonApp.PersonSortRoute = Ember.Route.extend({
setupController: function(controller, model) {
this.controllerFor('person').set('sortBy', model);
},
model: function(params) {
return PersonApp.Page.create({column: params.page_column});
}
});
PersonApp.PersonSearchRoute = Ember.Route.extend({
setupController: function(controller, model) {
this.controllerFor('person').set('filterBy', model.get('term'));
},
model: function(params) {
return PersonApp.Page.create({term: params.page_term});
},
serialize: function(model) {
return { page_term: model.term };
}
});
PersonApp.PersonPageRoute = Ember.Route.extend({
model: function(params) {
return PersonApp.Person.find(params.page_id);
},
setupController: function(controller, model) {
this.controllerFor('person').set('selectedPage', model.get('id'));
}
});
PersonApp.PersonRoute = Ember.Route.extend({
model: function(params) {
return PersonApp.Person.find();
}
});
我的问题的基础
1.) 用户点击第 2 页链接,网址更改为
/foo/#/page/2
2.) 然后同一用户决定按用户名而不是默认 id 排序,因此他们单击用户名
/foo/#/排序/用户名
**现在我丢失了页面,但我的内容仍然有一个 selectedPage 2(来自分页)
3.)最后他们决定使用搜索/过滤器过滤列表
/foo/#/search/dave(在他们输入 4 个字母之后)
**现在我丢失了排序参数和页面参数(但状态是在控制器上设置的)
这里的问题是,在我决定按用户名排序并通过工作“dave”过滤所有内容之后,我需要能够复制第 2 页的 url - 并将其粘贴到电子邮件中给同事,以便他们可以看到我现在看到的确切结果......但你可以告诉我,我的网址不再反映所有状态。
此外,后退按钮按预期执行,因为每次 url 更改后我都丢失了一些上下文。
我如何构建我的路由来实现这一点(假设 RC1 路由器 api 完全支持这个)?
在新路由器合并之前(2013 年 1 月上旬),我有类似的工作
更新
看起来alexspeller有一个自定义的 mixin 可以在今天完成这个任务