2013-10-28 8 views
6

मेरे पास मेरे एप्लिकेशन में बहुत सारे जटिल मॉडल दिखाए जा रहे हैं। मैं /updates आरईएसटी कॉल के माध्यम से इन मॉडलों में से कई को लाइव-अपडेट करता हूं। मैं last_request_timestamp पैरामीटर पास करता हूं और यह उन मॉडलों को वापस करता है जो अंतिम कॉल के बाद बनाए या संशोधित किए गए थे।स्टोर को मॉडल को दबाते समय अपडेट करें

मैं store.push(model, model_json) का उपयोग कर स्टोर में मॉडल जोड़ता हूं। हालांकि, मॉडल को धक्का देने के बाद टेम्पलेट अपडेट नहीं किए जाते हैं। मैं कैसे सुनिश्चित कर सकता हूं कि स्टोर और दृश्य में मॉडल के बीच बाध्यकारी है?

उत्तर

5

ठीक है, मैंने इसे समझ लिया। Ember.js FAQ कहते हैं

दूसरी तरफ, फ़िल्टर स्टोर के कैश में सभी रिकॉर्ड्स की लाइव खोज करते हैं। जैसे ही स्टोर में एक नया रिकॉर्ड लोड हो जाता है, फ़िल्टर यह देखने के लिए जांच करेगा कि रिकॉर्ड मेल खाता है या नहीं, और यदि ऐसा है, तो इसे खोज परिणामों की सरणी में जोड़ें। यदि वह सरणी टेम्पलेट में प्रदर्शित होती है, तो यह स्वचालित रूप से अपडेट हो जाएगी।

...

ध्यान रखें कि रिकॉर्ड एक फिल्टर में दिखाई नहीं देंगे, तो दुकान उनके बारे में पता नहीं है। आप स्टोर की push() विधि का उपयोग करके स्टोर में रिकॉर्ड सुनिश्चित कर सकते हैं।

इसलिए नियंत्रक में यह देखने के लिए कि मैं लाइव-अपडेट करना चाहता हूं, मैं मॉडल लाने के लिए स्टोर पर filter() का उपयोग करता हूं।

App.PostController = Ember.ObjectController.extend({ 
    comments: function() { 
    var postId = this.get('id'); 
    return this.get('store').filter('comment', function(comment) { 
     return comment.get('post.id') == postId; 
    }); 
    }.property('comments') 
}); 

अब, जब भी मैं push() एक नया Comment स्टोर करने के लिए, यह स्वतः ही ध्यान में रखते हुए उचित पोस्ट करने के लिए जोड़ा गया है।

0

आपको शायद उन्हें उस संग्रह में स्पष्ट रूप से धक्का देना होगा जो पृष्ठ पर pushObject का उपयोग करके प्रदर्शित किया जा रहा है। store.push एक लाइव रिकॉर्ड लौटाएगा, ताकि आप ऐसा कुछ कर सकें।

var book_record = store.push('book', model_json); 
this.get('controllers.books.content').pushObject(book_record); 

संभालने है कि BooksController एक मानक ArrayController है।

0

दुर्भाग्य से इसे दो चरणों (लेकिन सरल चरणों) की आवश्यकता है। आपको इसे स्टोर में जोड़ना होगा और उसके बाद श्रोताओं को एडाप्टर के माध्यम से परिवर्तनों को प्रसारित करने के लिए रिकॉर्ड को सहेजना होगा।

var pushedRecord = store.push(model, model_json); 
pushedRecord.save(); 

इसके अलावा, अगर आप एक से अधिक रिकॉर्ड आप प्रत्येक व्यक्तिगत रूप से आगे बढ़ाने के बजाय pushMany कॉल कर सकते हैं। आपको अभी भी प्रत्येक को बचाना है।

store.pushMany(model, jsonArray).forEach function (pushedInstance) { 
    pushedInstance.save(); 
} 
+0

आपको सहेजने के लिए कॉल करने की आवश्यकता नहीं है()। बस जोड़ना पर्याप्त है। – kumkanillam

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