W ExtJS 4.1 beta 2 udało mi się zaimplementować nieskończoną siatkę przewijania ze zdalnym sklepem. I w zasadzie wziął istniejącego (w pełni sprawny) siatkę stronicowania (z odległego sklepu, filtrowanie i sortowanie), a następnie umieścić w odpowiednich configs dla nieskończonego przewijania:ExtJS Infinite Scroll Grid ze zdalnymi filtrami i sortowaniem
// Use a PagingGridScroller (this is interchangeable with a PagingToolbar)
verticalScrollerType: 'paginggridscroller',
// do not reset the scrollbar when the view refreshs
invalidateScrollerOnRefresh: false,
// infinite scrolling does not support selection
disableSelection: true,
nie mówi nigdzie w docs (patrz Sekcja Nieskończone przewijanie), ale musisz ustawić swój sklep na konfigurację buffered: true
. I nie można załadować z store.load()
to trzeba zrobić tak:
store.prefetch({
start: 0,
limit: 200,
callback: function() {
store.guaranteeRange(0, 99);
}
});
Z wszystkich, że wszystko działa świetnie, gdybym przewijać powoli, a tym samym umożliwić danych do pobierania wstępnego, nie stosować żadnych filtrów i Don użyj dowolnego sortowania.
Jednakże, jeśli przewijam szybko lub próbuję ponownie załadować siatkę nieskończonego przewijania z aktywnym filtrem lub podczas sortowania, wszystko się rozpada. Błąd to options is undefined
.
spędziłem kilka godzin jakiejś śledzenie w kodzie i googlowania i oprócz stwierdzenia, że nikt nie wdrożył nieskończoną przewijania siatkę z odległych filtrów i zdalnym przewijania, znalazłem następujące:
filtrowanie jest uszkodzi powodu tej metody w Ext.data.Store
który nazwany jest od nieskończonej scroller kiedy potrzebuje więcej danych z serwera:
mask: function() {
this.masked = true;
this.fireEvent('beforeload');
},
z jakiegoś powodu ta metoda pożary beforeload
wydarzenie bezExt.data.Operation
parametr, który ma być jego częścią, jak określono here.
W wyniku wystąpienia błędu w module obsługi onbeforeload
w Ext.ux.grid.FiltersFeature
bo oczywiście „Opcje” jest niezdefiniowane:
/**
* @private
* Handler for store's beforeload event when configured for remote filtering
* @param {Object} store
* @param {Object} options
*/
onBeforeLoad : function (store, options) {
options.params = options.params || {};
this.cleanParams(options.params);
var params = this.buildQuery(this.getFilterData());
Ext.apply(options.params, params);
},
mogę wyciąć wywołanie tej metody mask
z kodu PagingScroller a następnie funkcja przewijania jest świetna. Mogę przewijać tak szybko, jak mi się podoba i ładuje dane poprawnie. Ale następnie filtry i sortowanie nie zostaną zastosowane do żądań ajax.
Nie nurkowałem tyle w aspekcie sortowania ale myślę, że coś podobnego z tej metody mask
ponieważ sortowania jest po prostu kolejnym elementem zawarte przez obiekt operation
i powoduje żadnego obiektu działania mają być przekazane do ajax żądanie.
myślę, że gdybym mógł dowiedzieć się, jak zmusić metodę mask
ognia beforeload
z parametrem operation
(jak docs powiedzieć, że ma) wszystko będzie dobrze. Problem polega na tym, że nie byłem w stanie wymyślić, jak to zrobić. Jakieś sugestie?
Jeśli ktoś po prostu powie mi, że się mylę, a ludzie faktycznie wykonali tę pracę, byłbym zainspirowany, ale urywek wszelkich nadpisań, których używałeś do rozwiązania tego problemu, byłby bardzo cenny.
Próbowałem także przejść na wersję 4.0.7 i 4.0.2a i otrzymałem takie same wyniki, więc nie jest to tylko problem związany z wersją beta.
Update - 07 lutego 12:
Wydaje się to rzeczywiście może być problem nie Ext.ux.grid.FilterFeature
nieskończona problemem przewijanie. Jeśli usunę konfigurację FilterFeature, całkowicie nieskończone przewijanie działa świetnie i przekazuje parametry sortowania do mojego backendu, gdy sortuję według kolumny. Zacznę zaglądać do końca FilterFeature.
Dobre miejsce. Rozumiem, co mówię, myślę: kiedy sklep odfiltruje do mniej niż zakres gwarancji, wtedy zakres gwarancji utrzymuje się w tej kwocie, a nie ładuje więcej. Problem z rozwiązaniem polega jednak na tym, że zakres gwarancji będzie miał taki sam rozmiar jak sklep i nie zostanie wstępnie pobrany, co oznacza, że gdy sieć zostanie przewinięta w normalny sposób, nigdy nie przeładuje się, gdy minie wiersz 200 lub cokolwiek rozmiar strony to. Dodałem rozwiązanie do nadpisania, po prostu nie jest ono zbyt dynamiczne. Zmienna gwarancjiRange ustawiła się na 100 statyczną, ponieważ taka jest moja. – Geronimo