पर डेटा के लिए प्रतीक्षा करें, मुझे लगता है कि मुझे बैकबोन राउटर के उचित उपयोग के पीछे विचार नहीं मिलता है। यहां मुझे यह मिला है:बैकबोन रूटर: पहले
मेरे पास कुछ डेटा है जो पृष्ठ लोड होने पर सर्वर से प्राप्त होता है और फिर इसे मॉडल और संग्रह में पैक करता है। उन मॉडलों और संग्रहों की संख्या अनिश्चित है। मैं राउटर का उपयोग सीधे संग्रह से कुछ संग्रह के दृश्य को प्रस्तुत करने में सक्षम होना चाहता हूं।
समस्या यह है: बैकबोन राउटर जल्दी शुरू होता है, और जब से मैं इसे एक निश्चित दृश्य तक पहुंचने के लिए कहता हूं और render
क्रिया को ट्रिगर करता हूं, तो ऐसा नहीं हो सकता है, क्योंकि ये विचार अभी तक नहीं बनाए गए हैं। इसका मतलब है कि लाने के बाद मुझे वास्तव में अपने मार्ग शुरू करना होगा।
अगर यह यह करने के लिए एक उचित तरीका है मैं नहीं जानता, लेकिन केवल विचार मैं के साथ आया है:
- लपेटें मार्गों परिभाषा और एक अलग उच्च-स्तरीय में
Backbone.history.start();
बिट -एसेसिबल फ़ंक्शन (यानी इसे मैन्युअल रूप से बाद में कॉल करने के लिए तैयार करें)। - भागो कि मेरे संग्रह के
fetch()
- उन संग्रहों की संख्या के लिए
success
कॉलबैक के रूप में कार्य अज्ञात है, भी मैं पता लगाने के लिए जब उन सभी को लाए जाने के लिए किया गया है कोई रास्ता नहीं है, और मैं शुरू करने के लिए नहीं करना चाहते हैं एक से अधिक बार मार्ग। तो मैं_.defer()
और_.once()
का उपयोग करता हूं।
यह काम करता है, लेकिन यह सुनिश्चित बहुत अजीब लग रहा है:
राउटर्स:
window.startRoutes = _.once(function() {
var AccountPage = Backbone.Router.extend({
routes: {
'set/:id': 'renderSet',
},
renderSet: function(setId) {
/** … **/
// Call the rendering method on the respective CardView
CardsViews[setId].render();
}
});
var AccountPageRouter = new AccountPage;
Backbone.history.start();
});
संग्रह:
window.CardsCollection = Backbone.Collection.extend({
model: Card,
initialize: function(params) {
/** … **/
// Get the initial data
this.fetch({success: function() {
_.defer(startRoutes);
}});
},
});
तो मेरे सवाल है ... मैं इसे सही कर रहा हूँ? या ऐसा करने का एक बेहतर तरीका है (होना चाहिए)?
तुरंत अजाक्स कॉल क्यों करें? प्रारंभिक डेटाबेस के लिए आवश्यक जेसन के साथ पृष्ठ को प्रस्तुत क्यों न करें और डेटा को रीढ़ की हड्डी में शुरू करें? – redsquare