न्यू राउटर एपीआई में एक मार्ग और संसाधन के बीच अंतर क्या है?


114

मैं a Routeऔर a के बीच के अंतर को समझने की कोशिश कर रहा हूं Resource। जिस तरह से मैं समझता हूं Resourceवह किसी Routeवस्तु के उप पथों को किसी अन्य Routeवस्तु पर सेट करने में मदद करता है । लेकिन यह स्पष्ट नहीं है जब मैं डिफ़ॉल्ट नाम मानचित्रण के रूप में अच्छी तरह से पथ के लिए हो रहा है।

जवाबों:


101

कृपया ध्यान दें कि १.११.० के बाद से, this.routeइसके बजाय केवल उपयोग किया जाता है this.resource। स्रोत: http://guides.emberjs.com/v1.11.0/routing/defining-your-routes/ *

विस्तृत विवरण के लिए इस पोस्ट को देखें।

यह इस पोस्ट का एक मोटा सारांश है (मैंने थोड़ा संशोधित किया है):

जब से संसाधन में बदलाव और बहुत से लोग दो के अर्थ के बारे में भ्रमित हैं और वे नामकरण को कैसे प्रभावित करते हैं। यहाँ अंतर है:

  • संसाधन - एक चीज़ (एक मॉडल)
  • मार्ग - चीज़ के साथ कुछ करना

तो इसका मतलब है कि मार्ग और संसाधन का उपयोग करने वाला एक राउटर इस तरह दिख सकता है:

App.Router.map(function() {
  this.resource("posts", { path: "/" }, function() {
    this.route("new", { path: "/new" });
  });
  this.route("another", { path: "/another" });
});

इसके परिणामस्वरूप निम्नलिखित मार्ग बनाए जाएंगे / उपयोग किए जाएंगे:

  • PostRoute, PostsController, PostsView
  • PostsIndexRoute, PostsIndexController, PostsIndexView
  • PostNewRoute, PostsNewController, PostsNewView
  • अदरटाउट, अदरकंट्रोलर, अदर व्यू

जैसा कि हम इस उदाहरण से देखते हैं, संसाधन नियंत्रक, मार्गों और दृश्यों के नामकरण का उपयोग / निर्माण किया जा रहा है ("नया" मार्ग "पदों" संसाधन के अधीनस्थ के रूप में माना जाता है)। मूल स्रोत से उद्धृत करें (मैंने इसे संशोधित किया, क्योंकि यह पैट्रिक एम के रूप में परेशान था क्योंकि टिप्पणियों में सही ढंग से बताया गया है):

इसका मतलब यह है कि जब भी आप एक संसाधन बनाते हैं तो यह एक नया नामस्थान बनाएगा। उस नामस्थान को संसाधन के नाम पर रखा गया है और सभी बाल मार्गों को इसमें डाला जाएगा।

अद्यतन: नेस्टेड संसाधनों के साथ अधिक जटिल उदाहरण

कई नेस्टेड संसाधनों के साथ निम्नलिखित अधिक जटिल उदाहरण पर विचार करें:

App.Router.map(function() {
  this.resource("posts", { path: "/" }, function() {
    this.route("new", { path: "/new" });
    this.resource("comments", { path: "/comments" }, function() {
      this.route("new", { path: "/new" });
    });
  });
  this.route("another", { path: "/another" });
});

इस मामले में संसाधन commentsएक नया नामस्थान बनाता है। इसका मतलब है कि इस मामले में परिणामी मार्ग निम्नलिखित होंगे। जैसा कि आप देख सकते हैं कि मार्ग के लिए मार्ग, नियंत्रक और दृश्य संसाधन मूल नाम के साथ उपसर्ग नहीं हैं। इसका मतलब है कि किसी अन्य संसाधन के भीतर संसाधन का नामकरण नामस्थान (= एक नया नामस्थान बनाता है) है।

  • PostRoute, PostsController, PostsView
  • PostsIndexRoute, PostsIndexController, PostsIndexView
  • PostNewRoute, PostsNewController, PostsNewView
  • CommentsRoute, CommentsController, CommentsView
  • CommentsNewRoute, CommentsNewController, CommentsNewView
  • अदरटाउट, अदरकंट्रोलर, अदर व्यू

इस व्यवहार को एम्बर डॉक्स में भी समझाया गया है ।


4
यह एम्बर गाइड में स्पष्ट होना चाहिए। मैं निश्चित रूप से इस अवधारणा से पहले भ्रमित था।
गैब्रियल जी रॉय

एक उत्कृष्ट पोस्ट का उत्कृष्ट सारांश। लेकिन आपके द्वारा शामिल अंतिम उद्धरण का कोई मतलब नहीं है That namespace will have an " which [...]:। क्या "मतलब है? क्या यह रूट के लिए बस एक प्लेसहोल्डर है नियंत्रक | राय?
पैट्रिक एम

हे पैट्रिक, यह इंगित करने के लिए धन्यवाद। मैं अब इसका कोई सुराग नहीं लगा सकता था। इसलिए मैंने नेस्टेड संसाधनों के साथ अधिक जटिल उदाहरण जोड़ा। मुझे लगता है कि यह इस परिदृश्य का हवाला देता है।
मैविलिन

यह बहुत स्पष्ट है। अतिरिक्त उदाहरण के लिए धन्यवाद, माविलिन।
पैट्रिक एम

क्या आप इस बारे में विस्तार से बता सकते हैं कि आपके उदाहरण और इस के बीच क्या अंतर है (यदि कोई हो):App.Router.map(function() { this.route("posts", { path: "/" }, function() { this.route("new"); this.route("comments"}, function() { this.route("new"); }); }); this.route("another", { path: "/another" }); });
तिमो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.