2012-06-25 10 views
5

मैं backbone.js का उपयोग करता हूं और संग्रह के बिना मॉडल करता हूं। दृश्य में मैं दृश्य प्रस्तुत करने के लिए कॉलबैक के साथ मॉडल पर लाने को कॉल करता हूं।backbone.js में ऑटो अपडेट दृश्य

this.user.fetch({success: function(d) { self.randomUserView.render() }}) 

मॉडल बदलते समय मैं स्वचालित रूप से दृश्य अपडेट कैसे कर सकता हूं? जैसे जब भी मैं कॉल करता हूं, मैं उपर्युक्त कॉलबैक निर्दिष्ट नहीं करना चाहता हूं। मैंने शुरूआत पर कई मॉडल कार्यक्रमों को देखने की कोशिश की लेकिन यह काम नहीं किया।

उत्तर

12

दृश्य में, देखने के मॉडल के लिए एक ईवेंट हैंडलर जोड़ें:

initialize: function() { 
    this.model.on('change',this.render,this); 
} 
+0

यह मॉडल 'लोड' या 'एड' है, भले ही यह मॉडल पहले ही लोड हो चुका है या नहीं। लेकिन आम तौर पर आप नए मॉडल लोड करने के लिए fetch() का उपयोग करते हैं, इसलिए आप 'एड' की सदस्यता लेते हैं। –

+1

आप इसे सुरक्षित खेल सकते हैं और बस 'this.model.bindAll (this.render)' के साथ जा सकते हैं, मानते हैं कि आप प्रत्येक मॉडल ईवेंट – jackwanders

1

रीढ़, घटना चालित है संचालित ढांचे को कालबैक नहीं (हालांकि तकनीकी रूप से वे कॉलबैक कर रहे हैं)। और आपका दृष्टिकोण बैकबोन के मूल निवासी प्रतीत नहीं होता है। जब आप fetch() करते हैं, तो उपयोगकर्ता मॉडल स्वचालित रूप से "एड" ईवेंट ट्रिगर करेगा। तुम सब करने की ज़रूरत है इसी को ध्यान में रखते इनिशियलाइज़ में इस ऐड जाता है:

initialize: function() { 
    ... your code... 
    this.model.bind('add', this.render); 
} 

इस तरह आप दृश्य init में भी केवल एक ही बार की सदस्यता और कभी स्पष्ट कॉलबैक पारित करने के लिए नहीं है।

+0

पर दृश्य प्रस्तुत करने के साथ ठीक हैं, बैकबोन एक ढांचा नहीं है, यह एक लाइब्रेरी है। – Fdr

0

असल में यदि आप संग्रह पर लाने पर रीफ्रेश करना चाहते हैं तो आपको रीसेट को बाध्य करने की आवश्यकता है!

this.model.bind('reset', this.render, this); 

अद्यतन केवल संग्रहित किया गया है यदि वर्तमान संग्रह संपादित किया गया है।

ps bindAll खतरनाक और आलसी है। (और शायद आपको लाइन के नीचे समस्याएं पैदा करने जा रहे हैं)

+0

यदि आप इस जवाब को कम करते हैं तो यह समझाने के लिए इतना दयालु क्यों हो सकता है? – sidonaldson

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