2012-03-07 12 views
14

कोई हमारे लिए कोई ऐप बना रहा है, मुझे कोड प्रदान किया गया है, इसलिए मैं इसे देख सकता हूं, और मैंने यह देखा, जो पहले ठीक लगता है, और संग्रह प्रबंधन को भी अच्छा लगता है उसका डेटा लेकिन थोड़ी देर के बाद मैंने इस विचार में संभावित नुकसान के बारे में सोचना शुरू कर दियाBackbone.js इसकी प्रारंभिक विधि से संग्रह प्राप्त करें

इसलिए: संग्रह की डेटा को अपनी प्रारंभिक विधि से लाने का अच्छा अभ्यास है।

var Book = Backbone.Model.extend({}); 

var Books = Backbone.Collection.extend({ 

    url: '/books', 

    initialize: function(){ 
     // do some logic here 

     // if collection is empty, fetch from server 
     if(this.size() == 0) 
      this.fetch(); 
    } 

}); 

मैं इस पूछना क्योंकि मैं इसे निम्नलिखित स्थिति में एक समस्या हो सकती है लग रहा है:

लगता है कि हम एक routeAction में हैं:

books: function() { 
    var books = new Books(); 
    var bookList = new BookList({ collection: books }); 
} 

'isn

उदाहरण के लिए

इस स्थिति को संभावित विफलता, यदि व्यू दृश्य के प्रारंभ से तेज़ होगा, जहां दृश्य रीसेट ईवेंट से बंधेगा, तो रीसेट पहले से ट्रिगर होगा दृश्य की शुरुआत को निष्पादित किया गया था?

क्या मैं इस पर गलत हूं, या मुझे यह तय करने के लिए टिकट जमा करना चाहिए।

उत्तर

21

व्यवहार में एक ओर जहां देखने के प्रारंभ सबसे अधिक संभावना हो जाएगा से पहले fetch() पूरा हो गया है (और आप के लिए बाध्य होगा render()reset के लिए नहीं initialize()) यह एक बहुत बुरा विचार है async संचालन के आदेश पर भरोसा करने के लिए वैसे भी। दूसरे शब्दों में, आपका कोड इस तरह से लिखा जाना चाहिए जिससे आदेश अप्रासंगिक हो।

मैंने fetch() को विभिन्न परियोजनाओं में initialize() में बुलाया है। मुझे अभी भी लगता है कि यह अवांछनीय और बुरी आदत है। जब आपको इन फायदों की आवश्यकता होती है तो स्पष्ट रूप से प्राप्त करना:

  1. जब भी आप एक नया संग्रह बनाते हैं, तो आप इसे तब कर सकते हैं जब आपको आवश्यकता हो।

    उदाहरण के लिए, यदि आप अपने दृश्य को प्रारंभ और प्रस्तुत करना केवल एक बार आप प्राप्त किए गए हो सकते हैं:

  2. आप यदि आप चाहते हैं क्रम में कुछ बातें कर सकते हैं।

    var bookList, books = new Books(); 
    var p = books.fetch(); 
    p.done(function() { 
        bookList = new BookList({collection: books }); 
        bookList.render(); 
    }); 
    
  3. यह परीक्षण को आसान बनाता है।

+0

अंतर्दृष्टि के लिए धन्यवाद, मैं उसे तदनुसार कोड संपादित करने के लिए कहूंगा। आप कई बिंदुओं के बारे में सही हैं, हालांकि मैं उनके मामले में विश्वास करता हूं कि वर्तमान ऐप केवल 1 संग्रह बनाता है, इसलिए प्रत्येक बार संग्रह को लोड करने पर लोड करना वास्तव में एक मुद्दा नहीं है, हालांकि मैं इसे देख सकता हूं जब ऐप जा रहा है अगले वर्ष बाद में संस्करण 2 या 3 में, अन्य संग्रह जोड़े जा सकते हैं। – Sander

+0

जैसा कि आप अपने प्रश्न में अंतर्निहित हैं, यह सही दृष्टिकोण का उपयोग करने का विषय है। 'प्रारंभिक' के अंदर लाने से कोई त्रुटि उत्पन्न नहीं होगी। यह सिर्फ अप्रभावी, बदसूरत और * सिद्धांत रूप में * गलत है। – ggozad

+0

@ mu-is-too-short धन्यवाद! मैंने सूचियों के अंदर कोड ब्लॉक को निकालने का प्रयास करने में 20 मिनट बिताए और असफल रहे। मुझे मेरी रीस्ट याद आती है ... – ggozad

संबंधित मुद्दे