2012-01-24 12 views
5

मैं एक कस्टम एडाप्टर के भीतर एक findAll कॉल का उपयोग कर, एक आरईएसटी एपीआई से कुछ सौ वस्तुओं को लोड करने के लिए एम्बर और एम्बर-डेटा का उपयोग कर रहा हूं। मेरे पास findAll का संदर्भ देने वाला एक ArrayController.content है, और उसके बाद किसी चयनित विजेट/ड्रॉपडाउन-मेनू में ऑब्जेक्ट प्रदर्शित करने के लिए recently added Ember.Select का उपयोग करें। मुझे चुनिंदा विजेट पर एक फ़ंक्शन चलाने की आवश्यकता होती है जब इसे सभी ऑब्जेक्ट्स (प्रत्येक ऑब्जेक्ट को चुनने का विकल्प होता है) - विशेष रूप से Chosen.js libraryएम्बर और एम्बर-डेटा के साथ: जब स्टोर लोड हो रहा है तो कॉलबैक कैसे सेट करें, और/या जब कोई संबंधित दृश्य फिर से प्रस्तुत हो जाता है?

क्योंकि इबर्स.इलेक्ट.didInsertElement और Ember.ArrayController.contentDidChange काफी काम नहीं करते हैं, क्योंकि चयन में कुछ सौ ऑब्जेक्ट्स को संभालने में थोड़ा सा समय लगता है (2-4 सेकेंड)। वे दोनों बहुत जल्द आग लगते हैं। तो क्या कोई और घटना है, या कोई अन्य दृष्टिकोण, जिसका उपयोग इसके बजाय किया जा सकता है?

उत्तर

9

DS.RESTAdapter.findQuery उत्तर है! DS.RESTAdapter.findAll विधि के विपरीत, यह DS.AdapterPopulatedModelArray बनाता है और देता है, जिसमें इसका स्वयं का isLoaded है ठीक है कि आप अपने ऐप में कहीं भी देख सकते हैं!

उदाहरण के लिए:

App.store = DS.Store.create({ 
    adapter: DS.RESTAdapter.create() 
}); 

App.set('MyItemList', App.store.findQuery(App.Item, 'homepageList')); 

App.MyView = Ember.View.extend({ 
    refresh: function() { 
     console.log('finished loading custom list'); 
    }.observes('App.MyItemList.isLoaded') 
});