2012-04-06 17 views
5

वापस नहीं करता है रीढ़ की हड्डी सीखने के लिए मैं ऐप जैसे ट्विटर बना रहा हूं। तो आप जानते हैं कि ट्विटर नए ट्वीट्स की जांच के लिए हर एन सेकंड में सर्वर को एक GET अनुरोध भेजता है। यदि नई ट्वीट्स हैं, तो यह छिपी हुई ली तत्व बनाता है और "एन नए ट्वीट्स" वाला बटन दिखाता है। यदि आप इसे क्लिक करते हैं, तो यह छिपी हुई ली तत्व दिखाता है, जो नई ट्वीट दिखाता है। लेकिन जब आप एक नया ट्वीट जोड़ते हैं तो व्यवहार अलग होता है: ट्वीट दिखाई देता है। इसे देखने के लिए आपको बटन पर क्लिक करने की ज़रूरत नहीं है।बैकबोन collection.create() अद्यतन मॉडल

छिपे हुए ट्वीट्स के लिए मैंने पहले ही पहला हिस्सा बनाया है। एक नया ट्वीट पोस्टिंग और यह सीधे कोई दिखाने का भाग के लिए, मैंने सोचा कि यह नया मॉडल) बनाने, collection.create (बुला और ट्रिगर घटना, की तरह कुछ कर ऐसा करने के लिए आसान होगा:

var newTweet = new Tweet(); 
newTweet.set(/* set the attributes here. Some attributes are missing, because they are calculated server side */); 

var created_tweet = this.collection.create(newTweet, { silent: true, wait: true }); // I choose silent=true because the add event on my collection is in charge of adding the new hidden tweets when there are new ones on the server 
this.collection.trigger("posted_new_tweet", created_tweet); 

फिर , मेरा संग्रह "post_new_tweet" ईवेंट की सदस्यता लेता है, इसलिए जब भी कोई उपयोगकर्ता एक नया ट्वीट पोस्ट करता है, तो मेरे संग्रह की एक विशिष्ट विधि कहलाती है। यह दृष्टिकोण तब तक ठीक काम कर रहा था जब तक कि ट्रिगर में पारित परिवर्तनीय create_comment के कारण त्रुटियां नहीं मिलीं: यह "पूर्ण" नहीं है। मेरा मतलब है कि मॉडल में "आईडी" या * "create_on" * जैसे कुछ विशेषताओं हैं जो अनिर्धारित हैं। इन विशेषताओं की गणना सर्वर की तरफ की जाती है, लेकिन मैंने सोचा कि अगर मैं पास = सही पास करता हूं, तो यह सर्वर द्वारा दी गई प्रतिक्रिया के साथ मेरे मॉडल का इंतजार और अद्यतन करेगा (जब POST अनुरोध सर्वर पर किया जाता है, तो यह लौटाता है जेसन में नया बनाया गया मॉडल)

क्या मेरे मॉडल में सर्वर पक्ष विशेषताएँ भी नहीं होनी चाहिए? क्या यह ऐसी चीज के लिए सही दृष्टिकोण है? यदि ऐसा नहीं है, तो संग्रह दृश्य को प्रदर्शित करने के लिए मेरे पास 2 अलग-अलग विधियां कैसे हो सकती हैं?

धन्यवाद!

उत्तर

14

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

आपको क्या करना चाहिए create पर सफलता कॉलबैक जोड़ें जो सर्वर प्रतिक्रिया पर ईवेंट को सक्रिय करता है।

var created_tweet = this.collection.create(newTweet, { silent: true, wait: true, success: this.successCallback }); 

// Add successCallback as a method to the collection 
successCallback: function(collection, response) { 
    // I'm not 100% positive which values are passed to this function. Collection may actually be the new model. 
    this.collection.trigger("posted_new_tweet", created_tweet); 
} 
+0

यह सही है :) धन्यवाद! – fiunchinho

+0

मेरा मानना ​​है कि बैकबोन के बाद के संस्करणों में, तर्क अब 'अगली मॉडल' और 'प्रतिक्रिया' हैं। – IanS

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