Ho percorsi con segmenti dinamici nidificati, ad esempio nidificazione /:locale/products/:product_id/items/:item_id
ecc. Voglio scambiare la locale in un'azione nel percorso locale. Non desidero passare al percorso di base /:locale
quando cambio le impostazioni internazionali.ember.js - scambia una risorsa nidificata da qualsiasi percorso
locale azione rotta:
actions: {
localeChanged: function(locale) {
var route = this.controllerFor('application').get('currentRouteName');
this.transitionTo(route, locale);
}
}
Questo funziona solo quando non sono profondamente nidificate. Vorrei evitare di implementare l'azione localeChanged
in ogni percorso per fornire i modelli esatti necessari per una determinata rotta.
Update 1 - soluzione sporca:
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);
}
}
dico sporca perché l'iterazione di this.router.router.currentHandlerInfos
sembra soggetto a errori. C'è un modo migliore?
Ha forse senso avere il 'locale' come parametro di query anziché essere parte delle risorse/percorsi? – Kalman
Ciò renderebbe sicuramente più semplice. Non so se sono ancora pronto a concederti. –
Probabilmente anche questo è sporco, ma che ne dici di espressioni regolari che modificano le impostazioni locali sull'intero 'location.pathname' se è sempre la prima parte del percorso? Ember gestirà la risoluzione completa del percorso? – Laurence