Tôi có các tuyến đường có phân đoạn động lồng nhau, ví dụ: /:locale/products/:product_id/items/:item_id
v.v. Tôi muốn hoán đổi miền địa phương trong một hành động trên tuyến địa phương. Tôi không muốn chuyển sang tuyến đường cơ sở /:locale
khi tôi thay đổi ngôn ngữ.ember.js - hoán đổi tài nguyên lồng nhau từ bất kỳ tuyến đường nào
locale tuyến đường hành động:
actions: {
localeChanged: function(locale) {
var route = this.controllerFor('application').get('currentRouteName');
this.transitionTo(route, locale);
}
}
này chỉ hoạt động khi tôi không lồng nhau sâu sắc. Tôi muốn tránh thực hiện hành động localeChanged
trong mọi tuyến đường để cung cấp các mô hình chính xác cần thiết cho một tuyến đường nhất định.
Cập nhật 1 - giải pháp bẩn:
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);
}
}
tôi nói bẩn vì iterating trên this.router.router.currentHandlerInfos
dường như dễ bị lỗi. Có cách nào tốt hơn?
Bạn có thể đặt 'locale' làm tham số truy vấn trái ngược với một phần của tài nguyên/tuyến đường không? – Kalman
Điều đó chắc chắn sẽ làm cho nó dễ dàng hơn. Tôi không biết liệu tôi đã sẵn sàng thừa nhận chưa. –
Điều này có thể là bẩn quá, nhưng làm thế nào về regex sửa đổi miền địa phương trên toàn bộ 'location.pathname' nếu nó luôn luôn là phần đầu tiên của đường dẫn? Ember sẽ xử lý độ phân giải đường đầy đủ? – Laurence