Jak dzisiaj nie ma jeszcze domyślny sposób obsługi stronicowania w ember.
Najpierw powinniśmy popatrzeć na prostszą rzecz, paginację z prośbą o numer findAll
.
Można to zrobić z czymś .query({page:3})
, ale prowadzi do pewnych problemów:
- Jest to dobre rozwiązanie dla klasycznych paginacji, ale przez nieskończone przewijanie nadal trzeba ręcznie połączyć wyniki.
- Wyniki nie są buforowane, więc posuwanie się do przodu i do tyłu na liście stronicowanej powoduje wiele zapytań. Czasami jest to konieczne, jeśli lista jest edytowalna, ale często jej nie ma.
Dla drugiego problemu buduję trochę addon called ember-query-cache
, który podpina do sklepu i umożliwia buforowanie wyników zapytania. Bardzo krótkie demo jest dostępne here.
Teraz, jeśli mówimy o relacji Chciałbym szczerze polecam używać najwyższego poziomu .query
aż masz lepsze wsparcie od samego ember-danych:
store.query('task', { person: get(person, 'id'), page: 3 }
Nie ma nic złego o nim. Otrzymujesz swój wynik i utrzymujesz relację w innym kierunku. Działa bez ingerencji w dane ember, dopóki nie potrzebujesz buforowania, a jeśli potrzebujesz buforowania, to wymaga to tylko kilku hackowania, które zrobiłem w moim dodatku.
Nadal mamy nadzieję, że dane ember będą w pełni zgodne z JSONAPI, a to wymagałoby paginacji. Myślę, że z punktu widzenia interfejsu API najlepszą rzeczą byłoby mieć możliwość zapytania o następną i poprzednią stronę ManyArray zwróconą przez relację. Byłoby to wraz z JSONAPI, w którym zapewniony jest następny i poprzedni link. Ale aby to osiągnąć, trzeba by włamać się głęboko do danych ember, nie uzyskując znacznej poprawy w stosunku do najwyższego poziomu .query
, z którego z powodzeniem korzystałem w wielu projektach.
Czy kiedykolwiek wymyśliłeś dobre rozwiązanie tego problemu? – RyanJM