2012-03-07 6 views
37

क्या बैकबोन.जेएस रूट में वैकल्पिक पैरामीटर होना संभव है?Backbone.js मार्ग वैकल्पिक पैरामीटर

, उदा, इस:

routes: 
    "search/[:query]": "searchIndex" 
बजाय

:

routes: 
    "search/": "searchIndex" 
    "search/:query": "searchIndex" 
+1

Gabe एच का जवाब चाहिए स्वीकार किए जाते हैं जवाब है, बजाय @mu बहुत छोटा है । –

+1

हां! टेकमोलॉजी उन्नत! – TTT

+0

"search /: query" जैसे रूट मेरे लिए काम नहीं कर रहे हैं। हालांकि "खोज" ठीक काम कर रहा है। कोई उपाय? –

उत्तर

87

बैकबोन 0.9.9 के रूप में, आप कोष्ठक के साथ वैकल्पिक पैरामीटर जोड़ सकते हैं।

अपने मार्गों में उदाहरण के लिए वस्तु आप इस तरह एक वैकल्पिक मार्ग हिस्से को परिभाषित कर सकते हैं:

routes: { 
    "organize(/:action)": "displayOrganize" 
} 

अब url पथ /#organize और /#organize/create तरह मार्गों से मेल खाएगी।

ध्यान रखें कि मान्यता प्राप्त होना अगर आप (स्लैश के साथ) /#organize/ तरह मार्गों की जरूरत है, तो आप कर सकते हैं:

routes: { 
    "organize(/)(:action)": "displayOrganize" 
} 
+0

आप प्रदर्शन के भीतर कार्रवाई कैसे प्रबंधित करते हैं? यानी आप 'प्रदर्शन व्यवस्थित कर सकते हैं: कार्य (क्रिया) {अगर (कार्रवाई) {// सामान ...}} '? – 1nfiniti

+0

यह स्वीकार्य उत्तर होना चाहिए। –

3

*splat का उपयोग कर के बारे में क्या:

मार्गोंrouter.routes

मार्ग हैश नक्शा यूआरएल आपके राउटर पर काम करने के लिए पैरामीटर के साथ, दृश्य के कार्यक्रम हैश के समान। मार्गों में पैरामीटर भाग, :param हो सकते हैं, जो स्लैश के बीच एक एकल यूआरएल घटक से मेल खाते हैं; और विभाजन भागों *splat, जो किसी भी यूआरएल घटकों से मेल खा सकता है।

उदाहरण के लिए, "search/:query/p:page" का एक मार्ग #search/obama/p2 का एक खंड से मेल खाती, कार्रवाई करने के लिए "obama" और "2" गुजर जाएगा। "file/*path" का मार्ग #file/nested/folder/file.txt से मेल खाता है, जो कार्रवाई के लिए "nested/folder/file.txt" गुजरता है।

8

आप regex आधारित मार्गों मैन्युअल the route method का उपयोग कर जोड़ सकते हैं:

मार्गrouter.route(route, name, [callback])

मैन्युअल रूटर के लिए एक मार्ग बनाने, route तर्क एक मार्ग स्ट्रिंग या रेगुलर एक्सप्रेशंस हो सकता है। मार्ग या नियमित अभिव्यक्ति से प्रत्येक मिलान कैप्चर कॉलबैक के लिए एक तर्क के रूप में पारित किया जाएगा।

तो कुछ इस तरह काम करना चाहिए:

this.route(/^search\/(.*)?/, 'searchIndex'); 

फिर searchIndex या अपने अपने तर्क :query के रूप में अपने लिए कुछ भी नहीं के साथ बुलाया जायेगा।

नकारात्मकता यह है कि आप अपने routes ऑब्जेक्ट में रेगेक्स मार्ग नहीं डाल सकते हैं। यदि आप उन्हें सभी एक साथ रखना चाहते हैं तो आप अपने राउटर के initialize विधि के अंदर अपने सभी मार्ग route के साथ जोड़ सकते हैं।

16

शायद सबसे आसान तरीका है बस एक से अधिक मार्ग, अतिरिक्त आर्ग के साथ एक, एक के बिना घोषित किया जाता है:

routes:{ 
     "authProxy/:hash": "authProxy",                                         
     "authProxy/:hash/:url": "authProxy" 
} 

तो बस अपनी पद्धति में उनके लिए जाँच:

authProxy: function(hash, url){ 
    if (url){ 
     // Hash and URL. 
    }else{ 
     // Just hash. 
    } 
} 

नोट कि मुझे यह दो अन्य उत्तरों की तुलना में बहुत बेहतर लगता है क्योंकि किसी अन्य डेवलपर के लिए यह समझना बहुत आसान है कि क्या हो रहा है।