Czy można wstępnie załadować powiązane dane, tak aby relacje były buforowane w danych ember?
Mam prostą relację hasMany / belongsTo, która wygląda tak
App.Foo = DS.Model.extend({
bar: belongsTo('bar', { async: true})
});
App.Bar = DS.Model.extend({
foos: hasMany('foo', { async: true})
});
Mam w kodzie trasy sytuacje, które odpalają żądanie, a kiedy odpowiedź wraca, uzyskuję dostęp do powiązanego modelu „bar”, gdy filtruję w dół / itd.
this.store.all('foo').clear();
var fooz = self.store.all('foo'); //new code
return this.store.find('foo').then(function(response) {
var filtered = response.filter(function(foo) {
return foo.get('bar').get('name') === 'bazz';
});
//other code that would normally be executed top-down
//including side-effect stuff like this
//self.store.createRecord('foo', someHash);
return fooz; //new code
});
Powyższe nie działa po raz pierwszy, ponieważ foo.get ('bar') jest obietnicą. Ale to tylko problem za pierwszym razem (kolejne żądania $ .ajax wydają się mieć wszystkie obiekty w pamięci podręcznej, więc nie jest to problem)
Co dziwne, zanim jeszcze uruchomię aplikację, ściągnąłem już wszystkie dane paska w init (pokazane poniżej). Dlaczego więc dane ember muszą nawet rozwiązać obietnicę „paska”, gdy technicznie dane powinny już znajdować się w sklepie lokalnie?
App.initializer({
name: 'bootstrap',
initialize: function() {
App.deferReadiness();
var store = App.__container__.lookup("store:main");
var bars = store.find('bar');
var configurations = store.find('configuration');
Ember.RSVP.all([bars, configurations]).then(results) {
App.advanceReadiness();
});
}
});