2013-01-05 10 views

उत्तर

35

राउटरवी 2 को वैश्विक स्थिरता के माध्यम से आसानी से एक्सेस नहीं किया जाता है, जिससे चीजों को 'गलत' तरीके से करना मुश्किल हो जाता है। ध्यान में रखना मुख्य बात यह है कि आपको वैश्विक चर के माध्यम से राउटर (या कुछ और) तक नहीं पहुंचना चाहिए। ऐसा करना एक आम तौर पर खराब अभ्यास है, जिससे कोड का परीक्षण करना बहुत कठिन होता है। दुर्भाग्यवश पुराने राउटर के साथ App.router.transitionTo('whatever') जैसे कुछ करना बहुत आसान था - आप उस जगह के उदाहरण पा सकते हैं, लेकिन यह एक अच्छा विचार नहीं है।

वैश्विक संदर्भ के साथ काम करने के बजाय, एम्बर राउटर के स्थानीय संदर्भों को केवल उन स्थानों पर इंजेक्ट करता है जहां इसकी आवश्यकता होती है।

  • मॉडल से: पहुंच योग्य नहीं। router = this.get('target')
  • एक दृश्य से:: मॉडल रूटर
  • एक नियंत्रक से बात कर रहा नहीं किया जाना चाहिए देखें रूटर का उपयोग नहीं करना चाहिए, लेकिन घटनाओं यह नियंत्रक होगा बुलबुला अप करने के लिए भेजता है। उदाहरण के लिए: this.get('controller').send('search', term)
  • टेम्पलेट से: {{action}} या {{#linkTo}} सहायताकर्ताओं को ईवेंट (नियंत्रक के माध्यम से) या अन्य यूआरएल में संक्रमण भेजने के लिए उपयोग करें।

अधिक विस्तार के लिए, इस पर नोट देखने के लिए प्रतिबद्ध: https://github.com/emberjs/ember.js/commit/5becdc4467573f80a5c5dbb51d97c6b9239714a8

** अद्यतन **

मैं एक साथ रखा एक बिजली जनवरी EmberNYC के लिए नए रूटर पर और अधिक विस्तार के साथ पर बात बैठक का - स्लाइड यहां हैं: How I learned to stop worrying and love the router

+0

और मार्ग से यह के रूप में '(यह, 'रूटर')' – Pavel

1

मेरा मानना ​​है कि यह हर जगह काम करता है:

App.Router.router.transitionTo('home')

मैं इसे एक दृश्य में उपयोग करता हूं। मुझे पता है कि यहाँ एक कोड गंध है। हालांकि, यह काम करता है।

+0

निश्चित रूप से एक कोड गंध से सुलभ है। इसके बजाय, एक क्रिया भेजें और इसे संक्रमण के मार्ग में संभालें। –

1

आप इस कोशिश कर सकते हैं:

App.__container__.lookup('router:main').transitionTo('name_of_your_route'); 
+1

डीबगिंग के लिए यह ठीक है लेकिन उत्पादन कोड से बचा जाना चाहिए। –

संबंधित मुद्दे