2012-05-25 17 views
6

यहां दस्तावेज़ के अनुसार: http://documentcloud.github.com/backbone/#FAQ-events संग्रह में सर्वर के साथ संग्रह सिंक करने के लिए कुछ करने पर सिंक ईवेंट निकाल दिया गया है। मैं संग्रह पर fetch विधि का आह्वान करने की कोशिश करता हूं और उस पर सिंक घटना की प्रतीक्षा करता हूं, लेकिन ऐसा कभी नहीं होता है। ईवेंट को निकाल दिया गया है, लेकिन मुझे संबंधित दृश्य को अपडेट करने के लिए संग्रह में सभी आइटम समन्वयित करने के बाद केवल एक ईवेंट की आवश्यकता है। इस घटना को निकालने का एक और तरीका है?संग्रह में Backbone.js सिंक ईवेंट

उत्तर

2

मेरा मानना ​​है कि "सिंक" ईवेंट केवल तभी निकाल दिया जाता है जब आप कोई मॉडल बदलते हैं। तो यदि आप मॉडल बनाते हैं, अपडेट करते हैं या हटाते हैं, तो "सिंक" ईवेंट आग लग जाएगा।

आपके मामले में, मुझे लगता है कि आप संग्रह पर "रीसेट" ईवेंट सुनना चाहते हैं।

संपादित करें: यदि आप {add:true} विकल्प सेट कर रहे हैं, तो कोई भी बैकबोन ईवेंट नहीं है जो सभी मॉडलों को जोड़ने के बाद आग लग जाएगी।

  1. बस add घटना को सुनने और उम्मीद यह बार-बार
  2. कहा जा हैंडलर कि _.debounce() समारोह का उपयोग कर debounced कर दिया गया है का उपयोग करके एक भी घटना का अनुकरण: आप कुछ ही विकल्प हैं।
  3. fetch() से वापसी मूल्य एक jQuery XMLHttpRequest वस्तु है। यह jQuery Deferred इंटरफ़ेस लागू करता है। तो आप उस खत्म के लिए सुन सकते हैं। उदाहरण के लिए:

    myCollection.fetch({add:true}).done(function(){ 
        myView.render(); //or whatever 
    }); 
    
+0

रीसेट ईवेंट मेरी ज़रूरतों के अनुरूप नहीं है क्योंकि मैं एड: सही पैरामीटर के साथ लाने के लिए कॉल करता हूं। –

5

समाधान परम विधि लाने के लिए के रूप में पारित 'सफलता' कॉलबैक में maunually समन्वयन ईवेंट ऊपर सक्रिय किया जाता है।

this.collection.fetch({add: true, success: function(collection, response){ 
      collection.trigger('sync'); 
}}); 
+1

रीढ़ की हड्डी 0.9.9 के रूप में सफलता कॉलबैक पर सिंक ट्रिगर जोड़ने की आवश्यकता नहीं है। Backbone.sync के भीतर http://backbonejs.org/#changelog समेकित "सिंक" और "त्रुटि" घटनाओं से। वे अब सफलता या त्रुटि कॉलबैक के अस्तित्व के बावजूद ट्रिगर किए गए हैं। –

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