मेरे पास नेस्टेड गतिशील सेगमेंट के साथ मार्ग हैं, उदाहरण के लिए /:locale/products/:product_id/items/:item_id
आदि घोंसले। मैं लोकेल मार्ग में एक कार्रवाई में लोकेल को स्वैप करना चाहता हूं। जब मैं लोकेल बदलता हूं तो मैं बेस /:locale
रूट पर संक्रमण नहीं करना चाहता हूं।ember.js - किसी भी मार्ग से एक नेस्टेड संसाधन को स्वैप करें
स्थान मार्ग कार्रवाई:
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
से अधिक पुनरावृत्ति त्रुटियों की संभावना लगती है। क्या कोई बेहतर तरीका है?
क्या संभवतः संसाधनों/मार्गों के हिस्से के रूप में आपके 'लोकेल' को क्वेरी पैरा के रूप में रखना समझ में आता है? – Kalman
यह निश्चित रूप से इसे आसान बना देगा। मुझे नहीं पता कि मैं अभी तक स्वीकार करने के लिए तैयार हूं या नहीं। –
यह शायद गंदा भी है, लेकिन पूरे 'location.pathname' पर लोकेल को संशोधित करने के बारे में कैसे है यदि यह हमेशा पथ का पहला हिस्सा है? क्या एम्बर पूरे रूट रिज़ॉल्यूशन को संभालेगा? – Laurence