Staram się dodać dane do modelowania ręcznie

beforeModel: function() {
    var scope =this;
    Ember.$.getJSON('/restURL').then(function(response){
                    scope.store.pushPayload('consultation',response);
},

I dane pomyślnie załadowane, widzę go w Ember Debugger, ale mam problem - dane nie są renderowane w widoku.

Szablon w aplikacji.hbs:

{{#each item in model}}
           {{#link-to 'consultation' item}}{{item.remoteUser.name}}{{/link-to}}
{{/each}}

Uwaga: Po załadowaniu danych za pomocą this.store.find('consultation'); działa dobrze, ale mam niestandardowy adres URL i nie mogę korzystać z tej konstrukcji.

0
user1156168 15 sierpień 2014, 14:26

2 odpowiedzi

Najlepsza odpowiedź

Jak to rozumiem, chcesz załadować konsultacje za pomocą bezpośredniego połączenia AJAX. Sposób, w jaki to robisz, konsultacje są pobierane w beforeModel, a następnie, ponieważ nie zwracasz obietnicy, Ember natychmiast przechodzi do wykonania haczyka model Wykonywanie połączeń Ajax. this.store.find masz w modelu, prawdopodobnie zrobi inny, ewentualnie nieprawidłowy prośbę do serwera. Najprostszy sposób jest po prostu

model: function() {
  var store = this.store;

  return Ember.$.getJSON('/restURL')
    .then(function(response) {
      store.pushPayload('consultation', response);
      return store.all('consultation');
    });
}

Zwróć uwagę na użycie store.all, która jest dynamiczną kolekcją wszystkich obiektów tego typu już w sklepie.

Możesz również rozważyć łamanie logiki do beforeModel i model jak w:

beforeModel: function() {
  return Ember.$.getJSON('/restURL')
    // this binding style is a matter of personal preference :-)
    .then(this.store.pushPayload.bind(this.store, 'consultation'))
},

model: function() {
  return this.store.all('consultation');
}
2
15 sierpień 2014, 13:26

Powinieneś użyć afterModel hak zamiast beforeModel, ponieważ beforeModel nie jest używany do agregacji danych. beforeModel Występuje przed rozwiązaniem modelu, nie może uzyskać dostępu do rozwiązanego modelu, więc nie możesz polegać na nim, aby dodać dodatkowe dane do modelu.

Z drugiej strony, afterModel Hak przekazuje rozwiązany model jako pierwszy argument, dzięki czemu możesz dodatkowo udekorować model jako swoje potrzeby, a możesz zwrócić obietnicę tak jak haczyk {x1}}.

Spójrz na ten prosty przykład: http://berjs.jsbin.com/nukebe/1

0
nightire 15 sierpień 2014, 12:59