2013-02-21 34 views
17

मैं अपने वर्तमान नियंत्रक में अपना पिछला राउटर कैसे प्राप्त कर सकता हूं।मैं अपना पिछला मार्ग कैसे प्राप्त कर सकता हूं?

App.MyController = Em.ObjectController.extend({ 
    next:function() { // This is my action helper in HBS 
     this.transitionTo('nextPage'); 
    }, 
    back:function() { // This is my action helper in HBS 
     // Here I need to dynamically identify my previous route. 
     // How can I get my previous route. 
    } 
}); 
+0

http: // stackoverflow के संभावित डुप्लिकेट।कॉम/प्रश्न/14831668/मार्ग-मैं-आया-से-या-पिछले मार्ग –

+0

मैं भी इस मुद्दे पर काम कर रहा हूं। बाद में एमवीसी संस्करण में यह अच्छा होगा अगर ऐसा कुछ था: Request.RawUrl.PreviousRoute – JoshYates1980

+1

बस 'history.back() 'करें। इस तरह एम्बर को काम करने के लिए डिज़ाइन किया गया है। अपने इतिहास को बनाए रखने के लिए मशीनरी का पूरा समूह बनाने की कोई जरूरत नहीं है। ब्राउज़र पहले से ही अपना रखता है। –

उत्तर

22

राउटर ऑब्जेक्ट का फिर से निरीक्षण करने के बाद, मुझे वहां कोई भी संपत्ति दिखाई नहीं दे रही है जो आपको अंतिम मार्ग पकड़ने की अनुमति देगी। पूर्व 4 में अंतिम मार्ग के लिए एक संपत्ति थी, लेकिन साथ काम करना मुश्किल था।

मेरा समाधान इसलिए है जैसा कि यह पहले 4 में था: मैं अपने मार्गों को संभालने के लिए अपना खुद का मिश्रण बनाउंगा, और मार्गों की उस सूची से, आप जो भी मार्ग प्राप्त कर सकते हैं उसके बाद आप प्राप्त कर सकते हैं: वर्तमान एक, पिछले एक, वगैरह ...

यहाँ jsFiddle: http://jsfiddle.net/sMtNG/

Mixin

करने के लिए पहली बात यह है कि हम में mixin में मार्गों पुश करने के लिए अनुमति देगा बनाने है एक HistoryController। हम setupController विधि बनाकर ऐसा कर सकते हैं जो हर बार जब आप मार्ग में जाते हैं तो उसे लागू किया जाता है।

App.HistoryMixin = Ember.Mixin.create({ 
    setupController: function() { 
     this.controllerFor('history').pushObject(this.get('routeName')); 
    } 
}); 

हम HistoryController में मार्ग को दबा रहे हैं।

इतिहास नियंत्रक

जब से हम वर्तमान में एक गैर-मौजूद HistoryController में routeName धक्का रहे हैं, हम आगे जाना है और जो बना है, जो पूरी तरह से कुछ खास नहीं है की आवश्यकता होगी।

App.HistoryController = Ember.ArrayController.extend(); 

सूचकांक नियंत्रक

HistoryController भंडार के बाद से मार्गों हम में नेविगेट किया की सूची है, हम इसे इस तरह IndexController के रूप में अन्य नियंत्रकों, पर सुलभ की आवश्यकता होगी, इसलिए हम needs इस्तेमाल करेंगे यह निर्दिष्ट करने के लिए कि कौन सा नियंत्रक इसे सुलभ होना चाहिए।

App.ApplicationController = Ember.Controller.extend({ 
    needs: ['history']  
}); 

लागू Mixin

अब हम सब कुछ हम मार्गों में से एक ट्रैक रखने के लिए की जरूरत है, और इसलिए हम भी निर्दिष्ट करते हैं कि हमारे मार्गों इस mixin को लागू करने की जरूरत है।

App.CatRoute = Ember.Route.extend(App.HistoryMixin); 

खाका

इतना ही नहीं बल्कि, अब है कि हम एक HistoryController है जो हमारे IndexController उपयोग कर सकते हैं, और mixin HistoryController में प्रत्येक पहुँचा मार्ग धक्का, हम उत्पादन के लिए हमारे आवेदन दृश्य का उपयोग कर सकते हैं मार्गों की एक सूची, और अंतिम मार्ग निर्दिष्ट करें। बेशक आपके मामले में आपको अंतिम मार्ग की आवश्यकता होगी, लेकिन मुझे सबकुछ करने में कोई समझ नहीं है!

<h1>Routes History ({{controllers.history.length}})</h1> 
<ul> 
    <li>Last Route: {{controllers.history.lastObject}}</li> 
    {{#each controllers.history}} 
     <li>{{this}}</li> 
    {{/each}} 
</ul> 

मुझे आशा है कि यह आपको सीधे और संकीर्ण पर ले जाएगा।

+0

यह गैर गतिशील मार्गों के लिए काम करता है। क्या यह दृष्टिकोण गतिशील सेगमेंट वाले मार्गों के लिए काम करेगा? – Hoetmaaiers

+0

क्या आपको मिक्सिन में अपने 'setupController' से' _super' को कॉल करने की आवश्यकता नहीं है? –

+7

रास्ता बहुत जटिल लगता है –