2012-06-25 19 views
8

मैं यह समझने की कोशिश कर रहा हूं कि एम्बर.जेएस के राज्य केवल रूट मैनेजर में परिभाषित किए गए हैं/माना जाता है, और क्या मार्ग एम्बर के अभिन्न अंग हैं। guides में से बहुत सारे मैंने देखा है कि आप मानते हैं कि आप राज्यों और मार्गों को बिल्कुल मेल खाते हैं।मार्गों का उपयोग किये बिना Ember.js में राज्य?

मैं उन राज्यों को बनाना चाहता हूं जो मार्गों पर निर्भर नहीं हैं, बल्कि केवल आवेदन की स्थिति पर हैं। उदाहरण के लिए, एक ईमेल क्लाइंट में, मेरे पास एक राज्य "userHasSpecifiedRecipient" हो सकता है। केवल अगर यह स्थिति सत्य है तो मैं फॉर्म के संदेश बॉक्स को सक्षम कर सकता हूं। लेकिन जाहिर है मैं यूआरएल होने के लिए नहीं करना चाहती:

myEmailClient.com#composingMessage_userHasSpecifiedRecipient_userIs... आदि

वहाँ इसके उदाहरण हैं?

दूसरा प्रश्न: क्या मैं उन राज्यों को मिला सकता हूं जो मार्गों और राज्यों के साथ मिलकर हैं?

अंत में: मैंने कुछ सलाह देखी है कि अगर लोग समवर्ती राज्यों की तरह चीजें चाहते हैं तो एम्बर के sproutcore-statechart एडन का उपयोग करने की अनुशंसा की जाती है। क्या यह अभी भी सच है?

उत्तर

4

EmberJS में, वहाँ एक Finite State Machine, Ember.StateManager के एक कार्यान्वयन है। राज्य प्रबंधक राज्य मशीन में राज्यों का प्रतिनिधित्व करने के लिए Ember.State का उपयोग करता है, जिसमें enter और exit फ़ंक्शन इत्यादि हैं। Class: Ember.StateManager पर एक नज़र डालें।

एक उदाहरण के लिए जो राज्य प्रबंधक का उपयोग करता है, एम्बर। व्यू दृश्य के विभिन्न राज्यों को प्रबंधित करने के लिए इसका उपयोग करता है। एक और उदाहरण एम्बर-डेटा है, जो विभिन्न राज्यों को रिकॉर्ड करने के लिए एक राज्य प्रबंधक का उपयोग करता है।

जीवन को आसान बनाने और बॉयलरप्लेट कोड से बचने के लिए, एम्बरजेएस के नवीनतम संस्करण में Router कार्यान्वयन है, जो अभी भी सप्ताह में एक या दो बार अपडेट के साथ एक बहुत ही प्रगतिशील है। आप GitHub downloads पर नवीनतम पा सकते हैं।

Ember.RouterEmber.StateManager का उप-वर्ग URL-आधारित अनुप्रयोग स्थिति पहचान प्रदान करने के लिए ज़िम्मेदार है। Ember.Router किसी एप्लिकेशन का उदाहरण एप्लिकेशन लोड समय पर ब्राउज़र यूआरएल का पता लगाता है और इसे किसी विशिष्ट एप्लिकेशन स्थिति से मिलान करने का प्रयास करता है। इसके अतिरिक्त राउटर समय के साथ किसी एप्लिकेशन के राज्य परिवर्तन को प्रतिबिंबित करने के लिए यूआरएल अपडेट करेगा। (JSDoc in Ember source)

इसके अलावा, Ember.Router फैली Ember.StateManager और Ember.Route फैली Ember.State, इन परस्पर विनिमय कर रहे। वास्तव में, राज्यों और मार्गों के मिश्रण का समर्थन करने के लिए सिर्फ एक दिन अधिक समर्थन किया गया था, Support basic States inside of Routes देखें।

2

आप इस सुविधा को अक्षम करने के लिए राउटर स्थान कार्यान्वयन को 'none' में बदल सकते हैं। अन्य विधियां 'हैश' या 'इतिहास' हैं (वर्तमान में ember-latest.js github पर)।

https://github.com/joliss/ember.js/blob/50aff86ef5b6847108bc8c32364171815c230d36/packages/ember-application/lib/system/location.js

App.Router = Ember.Router.extend({ 
    location : Ember.Location.create({ 
     implementation : 'none' 
    }) 
}); 
+1

मुझे अभी भी हाल ही में हाल ही में [यहुदा द्वारा उदाहरण] (https://gist.github.com/2679013) मिला है जो Ember.Router के बजाय Ember.StateManager का उपयोग करता है। उत्तरार्द्ध दस्तावेज का उपयोग करता है। उनके बीच क्या अंतर है? –

+0

इसके अलावा, ऊपर मेरे दूसरे प्रश्न के अनुसार, अगर मैं उन राज्यों के कुछ सबसेट रखना चाहता हूं जो मार्गों के साथ मिलकर हैं? उस स्थिति में मैं नहीं चाहता कि स्थान पूरी तरह अक्षम हो। (यदि यह मिश्रण कठिन है, हालांकि, यह इतना महत्वपूर्ण नहीं है और मैं मार्गों को किसी अन्य तरीके से कार्यान्वित कर सकता हूं।) –

+0

ओह, या मेरे पास दो अलग-अलग राज्य प्रबंधक हैं, एक स्थान के साथ और बिना किसी के? –

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