2013-01-22 14 views
5

मेरे पास एक ऐसी स्थिति है जहां डीएस पर रिकॉर्ड किया गया है। रिकार्डअरे सही में बदल जाता है लेकिन सामग्री, लम्बाई रिकॉर्ड रिकॉर्डर्रे अभी भी खाली है, उस समय 0 और केवल बाद में बदलती है।एम्बर-डेटा: यह जानना कि जब रिकॉर्डअरे पूरी तरह से आबादी हो जाती है

नमूना कोड (coffeescript):

@set('followRequests', App.FollowRequests.find()) 

... 

whenDataLoads: (-> 

console.log @get('followRequests.isLoaded') 
console.log @get('followRequests.length') 
@set('content', @get('followRequests').toArray()) 

).observes('followRequests.isLoaded') 

पहले लॉग बयान सही है, जबकि दूसरा 0 और जो इस डेटा का उपयोग करता टेम्पलेट खाली है। जब मैं वास्तविक AJAX अनुरोध देखता हूं तो मुझे लगता है कि अनुरोध रिकॉर्ड की एक सरणी देता है। और लंबाई और RecordArray की सामग्री करके कुछ समय बाद के रूप में ब्राउज़र कंसोल में देखा बदल सकता हूँ:

App.Router.myController.get('followRequests').get('length') ---> 12

हालांकि इस कोड (नीचे) टेम्पलेट में पॉप्युलेट करता है, लेकिन यह 12 बार चलता है ...

whenDataLoads: (-> 
console.log @get('followRequests.isLoaded') 
console.log @get('followRequests.length') 

@set('content', @get('followRequests').toArray()) 

).observes('followRequests.length') 

रिकॉर्डअरे पूरी तरह से पॉप्युलेट होने पर जानने का सही तरीका क्या है ... ??

+3

मेरा मानना ​​है कि यह एम्बर डेटा में एक बग है, मैंने इसके लिए बग ट्रैकर पर [एक मुद्दा] (https://github.com/emberjs/data/issues/652) खोला। हालांकि कामकाज खोजने में खुशी होगी। –

+0

@AdrienCoquio, धन्यवाद, किसी और को जानना अच्छा है, इसका भी सामना करना पड़ रहा है। इसे ट्रैक करेंगे, हालांकि मुझे वास्तव में कोई संभावित कामकाज नहीं दिख रहा है .. –

उत्तर

2

के बाद से समय Ember.js वादों का उपयोग करता है आप एंबर डाटा बीटा 1.0.0 में इस

App.FollowRequests.find().then(function() { 
    // This callback will fire when array is loaded 
}); 
0

कर सकते हैं, आप रिकॉर्ड (रों) का अनुरोध एक मार्ग या नियंत्रक में प्रदान की store संपत्ति का उपयोग कर देंगे ।

// fetch one 
var promiseArray = this.store.find('follow_request', follow_request_id); 

// fetch all 
var promiseArray = this.store.find('follow_request'); 

// set callbacks on promise array 
promiseArray.then(onFollowRequestSuccess, onFollowRequestFailure); 

// or set callbacks on promise object 
var promise = promiseArray.get('promise'); 
promise.then(onFollowRequestSuccess, onFollowRequestFailure); 

// or use computed property 
App.FollowRequestsController = Ember.ArrayController.extend({ 
    loadedCount: function() { 
     return this.get('[email protected]').filterBy('isLoaded', true).length; 
    }.property('[email protected]').cacheable() 
}); 
संबंधित मुद्दे