2012-07-08 14 views
6

एम्बर राउटर के साथ हाल ही में मैंने जो कुछ देखा है, वह केवल पत्ती मार्गों पर नेविगेट करने की अनुमति देता है - बाल मार्गों के बिना मार्ग।एम्बर राउटर केवल पत्ती मार्गों पर नेविगेट करने की अनुमति क्यों देता है?

अब जब तक मैं गलत तरीके से काम नहीं कर रहा हूं तो यह डिज़ाइन में एक बग/गलती जैसा लगता है।

के इस तरह उदाहरण कुछ के लिए लेते हैं: कई सहयोगियों

मैं परियोजनाओं के एक संग्रह है, प्रत्येक परियोजना है, इस के साथ मैं एक 3 कॉलम लेआउट के साथ (अपने मानक डेस्कटॉप ईमेल क्लाइंट की तरह कुछ एक यूआई का निर्माण करना चाहते) जहां बाईं तरफ मेरे पास परियोजनाओं की एक सूची है, जब किसी प्रोजेक्ट पर क्लिक करते हैं तो मध्य कॉलम सहयोगियों की एक सूची दिखाता है, और एक सहयोगी पर क्लिक करने से इसका विवरण राइटथैंड कॉलम में लोड हो जाता है।

अब एक प्रोजेक्ट पर क्लिक करते समय और /projects/1/collaborators/23 पर एक सहयोगी पर क्लिक करते समय मैं /projects/1 पर नेविगेट करना चाहता हूं।

यहाँ एक रूटर नेस्ट मार्ग के पहले भाग को दर्शाता हुआ है:

App.reopen(
    Router: Ember.Router.extend(
    enableLogging: true 
    location: 'hash' 

    root: Ember.Route.extend(
     index: Ember.Route.extend(
     route: '/' 

     redirectsTo: 'projects' 
    ) 

     projects: Ember.Route.extend(
     # This route is not routable because it is not a leaf route. 
     route: '/projects' 

     connectOutlets: (router) -> 
      # List projects in left column 
      router.get('applicationController').connectOutlet('projects', App.projects) 

     show: Ember.Route.extend(
      # This route is routable because it is a leaf route. 
      route: '/:project_id' 

      connectOutlets: (router, project) -> 
      # Render the project into the second column, which actually renders 
      # a list of collaborators. 
      router.get('projectsController').connectOutlet('project', project) 
     ) 
    ) 
    ) 
) 
) 

जैसा कि आप देखेंगे एंबर फोन नहीं करता है updateRoute इस लाइन की वजह से root.projects.show में संक्रमण जब तक (URL सेट) https://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/routable.js#L81

क्या किसी और ने ऐसा कुछ किया है? क्या इसे डिजाइन करने का कोई बेहतर तरीका है?

उत्तर

7

ऐसा करने का सबसे अच्छा तरीका यह है कि root.projects.index राज्य "/" के मार्ग के साथ और कुछ और नहीं है। इस तरह प्रत्येक पृष्ठ का अपना विशिष्ट राज्य होता है।

projects: Ember.Route.extend(
    # This route is not routable because it is not a leaf route. 
    route: '/projects' 

    connectOutlets: (router) -> 
    # List projects in left column 
    router.get('applicationController').connectOutlet('projects', App.projects) 

    index: Ember.Route.extend(
    route: "/" 
) 

    show: Ember.Route.extend(
    # This route is routable because it is a leaf route. 
    route: '/:project_id' 

    connectOutlets: (router, project) -> 
     # Render the project into the second column, which actually renders 
     # a list of collaborators. 
     router.get('projectsController').connectOutlet('project', project) 
) 
) 

एनबी। ऐसा कहा जा रहा है कि मैं 3 कॉलम लेआउट के साथ एक समान काम कर रहा हूं, और ऊपर के मार्गों के बीच मध्य और दाएं कॉलम से मिलान कर रहा हूं और प्रत्येक संभावित मध्य दृश्यों में साझा लेआउट में बाएं कॉलम जोड़ रहा हूं।

+0

धन्यवाद ब्रैडली, यह चाल चल रहा है। – Ivan

+0

बहुत चालाक। पारितोषिक के लिए धन्यवाद। – nembleton

+0

@ ब्रैडलीप्रिएस्ट मेरे पास एक [प्रश्न] है (http://stackoverflow.com/questions/11377498/ember-js-crud-scenarios-specifying-view-from-within-a-route) इसके बारे में। मुझे यह समझना मुश्किल लगता है कि सीआरयूडी परिदृश्यों के साथ एम्बर। राउटर का उपयोग कैसे करें। क्या आप एक नज़र देख सकते हैं? – MilkyWayJoe

2

मुझे लगता है कि यह समस्या हल हो गई है। मैं एक सूचकांक के बिना एम्बर मार्गों का उपयोग कर रहा हूं और किसी भी पत्ते राज्य के मुद्दों का सामना नहीं कर रहा हूं। मैं ब्राउज़ कर रहा था कि हमें एक सूचकांक की आवश्यकता क्यों है और मैं यहां उतरा। क्या सूचकांक राज्य का उपयोग करने के लिए कोई और कारण है?