2013-01-22 15 views
6

के लिए रूटिंग मैं परिदृश्य निम्नलिखित यह पता लगाने की कोशिश कर रहा हूँ: आइटम को देखने के लिए एक और उन्हें खरीदने के लिए एक:Backbone.js: नेस्टेड विचारों

कहते हैं कि मैं दो बार देखा गया है कि सुविधा देता है। पकड़ यह है कि खरीददारी देखने के लिए एक उप दृश्य है।

मार्ग के लिए मेरे पास है:

var MyRouter = Backbone.Router.extend({ 
    routes: { 
    'item/:id': 'viewRoute', 
    'item/:id/buy': 'buyRoute' 
    } 
}); 

var router = new MyRouter; 

router.on("route:viewRoute", function() { 
    // initialize main view 
    App.mainview = new ViewItemView(); 

}); 

router.on("route:buyRoute", function() { 
    // initialize sub view 
    App.subview = new BuyItemView(); 
}); 

अब उपयोगकर्ता पृष्ठ रीफ़्रेश करने buyRoute ट्रिगर किया जाता है, लेकिन अब वहाँ कोई मुख्य दृश्य है यदि। इसे संभालने का सबसे अच्छा समाधान क्या होगा?

उत्तर

0

मुझे लगता है कि अभी आप जिस समस्या का सामना कर रहे हैं वह यह है कि आप BuyView के अंदर ViewItem के अंदर कुछ सामान दिखाना नहीं चाहते हैं? यदि ऐसा है तो आपको मॉड्यूलरलाइज़ करना चाहिए जो BuyView और ViewItem को किसी अन्य दृश्य में आम है, फिर इसे उन दोनों मार्गों पर प्रारंभ करें।

यहाँ मेरी क्षुधा

https://github.com/QuynhNguyen/Team-Collaboration/blob/master/app/scripts/routes/app-router.coffee

आप देख सकते हैं में से एक से एक कोड उदाहरण है, मैं साइडबार बाहर modularized के बाद से यह कई बार देखा गया के बीच साझा किया जा सकता है। मैंने ऐसा किया ताकि इसे पुन: उपयोग किया जा सके और किसी भी विवाद का कारण नहीं बन सके।

0

आप मुख्य दृश्य के अस्तित्व की जांच कर सकते हैं और इसे खोल/खोल सकते हैं यदि यह पहले से मौजूद नहीं है।

मैं आमतौर पर ऐप को बूट करने पर अपने ऐप के प्रमुख दृश्य (लेकिन नहीं खोलता) बना देता हूं, और फिर खोलने/बंद करने के लिए किसी प्रकार का दृश्य प्रबंधक बनाता है। छोटी परियोजनाओं के लिए, मैं अपने ऐप ऑब्जेक्ट की views प्रॉपर्टी पर अपने विचार संलग्न करता हूं, ताकि वे सभी एक ही स्थान पर हों, जो view.mainView, views.anotherView, आदि

मैं बैकबोन भी बढ़ाता हूं। दो विधियां: open और close जो न केवल डीओएम से/दृश्य को जोड़ता/हटाता है बल्कि दृश्य पर isOpen ध्वज भी सेट करता है।

इस के साथ

, आप अगर एक की जरूरत को देखने के पहले से खुला है देखने के लिए जाँच कर सकते हैं, तो इसे खोलने यदि नहीं, तो जैसे:

if (!app.views.mainView.isOpen) { 
    // 
} 

एक वैकल्पिक इसके अलावा अपने अनुप्रयोग clearViews कहा जाता है पर एक विधि बनाने के लिए किया जाएगा जो clearViews पर पैरामीटर के रूप में पारित विचारों के नामों के अपवाद के साथ, किसी भी खुले विचार को साफ़ करता है। इसलिए यदि आपके पास एक navbar दृश्य है कि आप कुछ मार्गों पर साफ़ नहीं करना चाहते हैं, तो आप केवल app.clearViews('topNav') पर कॉल कर सकते हैं और विचारों को छोड़कर सभी विचारों को बंद कर सकते हैं .topNav बंद हो जाएगा।

जांच इस सब के लिए कोड के लिए इस सार: https://gist.github.com/4597606

+0

coffeescript में उपरोक्त कोड, आप चाहें तो: https://gist.github.com/4597528 – georgedyer