我有带有嵌套动态段的路由,例如/:locale/products/:product_id/items/:item_id等嵌套。我想在区域设置路由中的动作中交换区域设置。当我更改区域设置时,我不想转换到基本的/:locale路由。
区域路由操作:
actions: {
localeChanged: function(locale) {
var route = this.controllerFor('application').get('currentRouteName');
this.transitionTo(route, locale);
}
}这只在我没有深入嵌套的情况下起作用。我希望避免在每个路由中实现localeChanged操作,以提供给定路由所需的精确模型。
更新1-污秽解决方案:
actions: {
localeChanged: function(locale) {
var routes = this.router.router.currentHandlerInfos;
var models = [];
for (var i = 0; i < routes.length; i++) {
var params = routes[i].params;
for (var param in params) {
if (params.hasOwnProperty(param)) {
models.push(param === 'locale' ? locale : params[param]);
}
}
}
var args = models.slice();
var currentRouteName = this.controllerFor('application').get('currentRouteName');
args.unshift(currentRouteName);
this.transitionTo.apply(this, args);
}
}我说“脏”是因为迭代this.router.router.currentHandlerInfos似乎容易出错。有更好的办法吗?
发布于 2015-06-19 00:02:09
您可以创建一个添加此操作的baseRoute。那么您的所有路由都可以从这个基本路由继承。您只需编写一次代码,就可以在所有路由上共享代码。例如。
App.BaseRoute = Ember.Route.extend({
actions: {
localeChanged: function(locale) {
var routes = this.router.router.currentHandlerInfos;
var models = [];
for (var i = 0; i < routes.length; i++) {
var params = routes[i].params;
for (var param in params) {
if (params.hasOwnProperty(param)) {
models.push(param === 'locale' ? locale : params[param]);
}
}
}
var args = models.slice();
var currentRouteName = this.controllerFor('application').get('currentRouteName');
args.unshift(currentRouteName);
this.transitionTo.apply(this, args);
}
}});
App.SomeRoute = BaseRoute.extend();https://stackoverflow.com/questions/27710301
复制相似问题