上記のjsfiddleは、次のことができる簡単なember.jsアプリを示しています。
- コンテンツにページを追加する
- 列で並べ替え
- 次のように入力してコンテンツをフィルタリングします
ページネーションルートのURLは次のようになります/foo/#/ page / 2
ソートルートのURLは次のようになります/foo/#/ sort / id
フィルタルートのURLは次のようになります/foo/#/ search / text
TL; DR =>これは、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のリンクをクリックすると、URLが次のように変更されます。
/ foo /#/ page / 2
2.)次に、同じユーザーがデフォルトIDではなくユーザー名で並べ替えることを決定したため、ユーザー名をクリックします
/ foo /#/ sort / username
**ページを失いましたが、コンテンツにはまだ2のselectedPageがあります(ページネーションから)
3.)最後に、検索/フィルターを使用してリストをフィルターに掛けることを決定します
/ foo /#/ search / dave(4文字を入力した後)
**ソートパラメータとページパラメータが失われました(ただし、状態はコントローラに設定されています)
ここでの問題は、ユーザー名で並べ替えてすべてを「dave」という作品でフィルタリングした後、ページ#2のURLをコピーして、同僚にメールで貼り付けて、私が今見ている正確な結果...しかし、あなたが言うことができるように、私のURLはもはやすべての状態を反映していません。
さらに、URLを変更するたびにコンテキストが失われるため、戻るボタンは期待どおりに機能します。
これを達成するためにルートを構築するにはどうすればよいですか(RC1ルーターAPIがこれをサポートしていると仮定します)?
新しいルーターが統合される前(2013年1月初旬)にこのようなものが機能していました
アップデート
alexspellerには、今日これを実現するカスタムミックスインがあるようです