2011-05-18 10 views
14

मैं ऐसे कोड है लाने। लेकिन मैं अगले कोड का उपयोग करने की कोशिश करता है, तो:Backbone.js समस्या (तुरंत डेटा ताज़ा नहीं कर सकता)

$('#fetch').click(function(){ 
    coll.fetch(); 
    console.log(coll.toJSON()); 
}); 
  • यह केवल दूसरा क्लिक (फ़ायरबग में http-प्रतिक्रिया मैं पहले एक के बाद देखें) के बाद मुझे डेटा दिखाता है। ऐसा लगता है कि डेटा समय पर ताज़ा नहीं किया जाता है।

यदि मैं प्रत्येक कथन को अलग-अलग आयोजन में डालता हूं तो यह सही काम करता है। लेकिन मुझे तुरंत संग्रह की लंबाई जानने की जरूरत है। यह कैसे करना है?

उत्तर

24

ध्यान रखें कि fetch सर्वर पर एक असीमित कॉल है। अपने कोड काम करने के लिए के रूप में आप की उम्मीद, एक success समारोह एक बार यह सर्वर से इसकी सामग्री ताज़ा करता है कि Backbone.Collection कॉल कर सकते हैं बनाने के लिए:

$('#fetch').click(function(){ 
    coll.fetch({ 
     succcess: function() { 
      console.log(coll.toJSON()); 
     } 
    });  
}); 
जाहिर

आप अनुप्रयोग वास्तव में console.log तो एक वास्तविक दुनिया उदाहरण कॉल करने के लिए की जरूरत नहीं है रीढ़ की हड्डी की घटना इस तरह बंधन का प्रयोग करेंगे:

coll.bind('refresh', someFunction); 
coll.fetch(); 

इस दृष्टिकोण के साथ, रीढ़ की हड्डी someFunction जब संग्रह के रिफ्रेश कॉल करेंगे। यह वास्तव में उपयोगी है खासकर जब someFunctionrender फ़ंक्शन है जिसे आप अपने संग्रह को बाध्य करना चाहते हैं।

coll.bind('refresh', yourView.render); 
coll.fetch(); 
+0

जब 'ताज़ा' घटना की आग हो जाता है? – Andrew

+1

उस ईवेंट को आग लगती है जब संग्रह सर्वर से डेटा प्राप्त करना समाप्त कर देता है। –

+0

धन्यवाद एंड्रयू :) –

6

संस्करण 0.5.0 संग्रह से। रीफ्रेश का नाम बदलकर Collection.reset कर दिया गया था।

तो एंड्रयू जवाब में (है कि मैं बहुत उपयोगी पाया):

coll.bind('refresh', someFunction); 

coll.bind('reset', someFunction); 
संबंधित मुद्दे