1

http://jsfiddle.net/BBt2h/1/

上面的 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 可以在今天完成这个任务

这是项目github 页面,这里是 github 上 emberjs 项目的未解决问题

4

0 回答 0