2012-10-29 15 views
6

मैं वर्तमान में तो जैसे कुछ एंबर सरणियों को देख रहा हूँ से अधिक पुनरावृत्ति: अगर my_array अद्यतन किया जाता है,Ember.JS: @each अवलोकन, लेकिन सिर्फ नए/बदल आइटम

observe_array: function() { 
    this.get("my_array").forEach(function(e,i) { 
     // do something 
    }); 
}.observes("[email protected]"); 

कई बार, कई तत्वों पर जोड़ रहे हैं एक बार। हालांकि, पर्यवेक्षक एक-एक करके आग के रूप में प्रत्येक तत्व जोड़ दिया जाता है, जो बहुत ही अक्षम हो जाता है। क्या यह और अधिक कुशलता से करने के लिए वैसे भी है? अनिवार्य रूप से, मैं "my_array"

संदर्भ के लिए, my_array की यथार्थवादी आकार 600-1200 तत्वों के बीच हो जाएगा के आधार पर एक उत्परिवर्तित सारणी रखने के लिए सक्षम होना चाहिए। "कुछ करें" ब्लॉक में कुछ ऑपरेशन शामिल होते हैं जो थोड़ा अधिक समय लेते हैं - तारों से दिनांक वस्तुएं बनाते हैं और प्रत्येक तत्व को जेसन प्रतिनिधित्व में परिवर्तित करते हैं।

इसके बजाय एक पर्यवेक्षक करने का मैं भी संचित करने योग्य() विधि/ध्वज के साथ एक संपत्ति की कोशिश की, लेकिन वह बहुत ज्यादा चीजें तेजी लाने के लिए ....

+0

क्या तुम जानते हो जब तुम सरणी अद्यतन किया जाता है? –

+0

@ sly7_7 मुझे डर है कि मैं काफी समझ में नहीं आता कि तुम क्या कह रहे हैं लगता है, या कम से कम जवाब किस तरह आप देख रहे हैं। सरणी वास्तव में एक एम्बर-डेटा रिकॉर्ड सरणी है, और एक निश्चित मॉडल से लोड किए गए सभी तत्वों का प्रतिनिधित्व करती है। –

+0

तुम मुझे यहाँ एक अच्छा जवाब दे, भले ही मेरे सवाल का एक बकवास ^^ था। My_array.isLoaded को देखने का प्रयास करें और देखें कि यह बेहतर है :) –

उत्तर

1

(टिप्पणियों के माध्यम से) मान लिया जाये कि सीवन नहीं था कि अपने सरणी एक एंबर-डेटा एक आबादी है, तो आप array.isUpdating संपत्ति को देख कोशिश करनी चाहिए। मुझे सफलता मिली/यह एक।

केवल एक ही दोष यह है कि यह केवल .findAll() का उपयोग करते समय सेट किया गया है! (ताकि Model.find())

+0

ठीक है, मैं यहां क्या कर रहा हूं: मेरे पास "फ़िल्टर किया गया" फ़िल्टर है जो अनिवार्य रूप से एक स्टोर है। मेरे मॉडल पर फ़िल्टर। पहले मैंने इस पर लोडिंग, isUpdating, आदि का निरीक्षण करने की कोशिश की ... हालांकि जब भी कोई आइटम जोड़ा गया था तो इसे निकाल दिया गया। अलग-अलग मैं store.findQuery का उपयोग करके वस्तुओं के लिए पूछताछ कर रहा था। मैं जो कर रहा था वह सिर्फ स्टोर पर लोड हो रहा था। findQuery, जो केवल एक बार आग लगती है - यह सभी वस्तुओं को लोड करने के बाद। –

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