2013-01-22 10 views
5

Mam sytuację, w której isLoaded na DS.RecordArray zmienia się na true, ale zawartość, długość właściwości RecordArray jest nadal pusta, 0 w tym czasie i zmienia się tylko później.Ember danych: Wiedząc, kiedy RecordArray jest całkowicie wypełniony

Przykładowy kod (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') 

Pierwsze stwierdzenie jest prawdziwe dziennika podczas gdy drugi jest 0 i szablon, który korzysta z tych danych jest pusta. Kiedy widzę rzeczywiste żądanie AJAX widzę, że żądanie zwraca tablicę rekordów. A długość i treść RecordArray zmieniają jakiś czas później widziany w konsoli Browser wykonując:

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

Jednak ten kod (poniżej) ma wypełnić treść w szablonie, ale działa 12 razy ...

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

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

).observes('followRequests.length') 

Jaki jest właściwy sposób wiedzieć, kiedy RecordArray jest całkowicie zaludnionych ... ??

+3

Wierzę, że jest to błąd w Ember-data, otworzyłem [problem] (https://github.com/emberjs/data/issues/652) w sprawie śledzenia błędów w tej sprawie. Z przyjemnością uda się znaleźć obejście problemu. –

+0

@AdrienCoquio, dzięki, dobrze wiedzieć, że ktoś inny również stoi w obliczu tego. Śledzę to, ale nie widzę żadnego możliwego obejścia, chociaż ... –

Odpowiedz

2

Ponieważ czas ember.js wykorzystuje obietnice można to zrobić

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

w beta Ember Danych 1.0.0, musisz zwrócić się do rekordu (ów) za pomocą dostarczonego store nieruchomość w trasie lub kontrolera .

// 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() 
}); 
Powiązane problemy