Мързеливо зареждане от страна на клиента в плъгин jquery на DataTables от IndexedDB

Използвам таблици с данни от известно време, но едва наскоро започнах да работя с IndexedDB. В по-голямата си част двете работят заедно доста добре, но се натъкнах на малък проблем.

Това, което искам да направя, е да заредя данни от локална база данни, но не всички наведнъж. Причината е, че зарежда хиляди записи, което е доста бавно. Вместо това бих искал да направя с indexedDB това, което правех от страната на сървъра - където изпращам част от записите и общ брой на това колко записи всъщност има. DataTables може да използва тези две части информация, за да пагинира правилно.

Това обаче използва опцията fnAjaxSource, която приема url. Трябва да взема функция, която връща данни по някакъв начин. Не намерих някой да прави същото. В момента използвам DataTables 1.9 за проекта, но бих могъл да използвам 1.10 за тази и подобни страници, ако това се изисква. Преминаването през API и документацията обаче не ми показа никакви начини да кажа на DataTables да очаква повече записи, отколкото получава. Ако има някаква друга информация, от която се нуждаете от мен, моля, уведомете ме, но не мога да публикувам пример, тъй като не знам какво правя. Надявам се, че има лесен вариант или по някакъв начин мога да напиша приставка, която прави това, но не видях нищо, което да ми дава надежда.

Зададох въпроса по подобен начин на форума DataTables тук.

Трябва да поясня, че наистина нямам проблеми с IndexedDB. Зареждам данните си на парчета добре, както и получавам броя на общия брой записи, които отговарят на моите критерии за търсене. Проблемът е с DataTables, които искат всички данни, а не само част, за да знаят колко записа ще съществуват и как да направят пагинацията.


person S. Buda    schedule 29.09.2014    source източник
comment
В допълнение към моя отговор, ако търсите нещо извън малко приложение, бих предложил обвивка на IndexedDB като Декси. Има функции като offset и ограничение, което улеснява получаването на данни за заявки за DataTables. Има и други там, само с този съм запознат.   -  person Chris Hunt    schedule 25.07.2015


Отговори (2)


От 1.10 можете да подадете функция за опцията ajax при инициализиране на DataTable. В ajax документацията има подробности

Като функция извършването на извикването на Ajax е оставено на вас самите [...] ако желаете, може да се използва метод, различен от Ajax, за получаване на необходимите данни, като например уеб съхранение...

Когато данните са получени от източника на данни, вторият параметър (callback тук) трябва да бъде извикан с един единствен параметър, предаден - данните, които да се използват за изчертаване на таблицата.

Така че по същество:

$('#example').dataTable( {
  ajax: function (data, callback, settings) {
    // ... retrieve data using parameters in `data` ...
    // ... transform result into format expected by callback ...
    callback(transformed_result);
  }
});

Освен това, ако активирате и обработка от страна на сървъра, тогава аргументът data, предаден на вашата функция, ще също така включват свойствата start, length и т.н., които могат да се използват за ограничаване на броя на записите, които изисквате от IndexedDB.

person Chris Hunt    schedule 25.07.2015
comment
Здравейте!, имам малък проблем с това, можете ли да ме напътствате през стъпките? - person Kari dime; 29.11.2020

Не съм съвсем сигурен, че те разбирам. IDB не е като LocalStorage, където всичко се зарежда в паметта. Можете да имате огромно количество данни в IDB и да извлечете само малка част. Вижте използването на диапазони с проклятия, за да отворите малка част от вашата маса.

Предполагам, че основно това, което казвам, е, че - извън кутията, без да прави нещо "специално", IDB поддържа четене на части от данни.

person Raymond Camden    schedule 30.09.2014
comment
Да, и аз чета частите от данни добре, проблемът е с DataTables, които очакват „всички“ данни за странирането да работят правилно. Има възможност за страниране от страна на сървъра, използвайки сървърни извиквания с Ajax, но това не е страна на сървъра и аз не извършвам действията си чрез Ajax, а само прости функции на javascript. Като такъв, изглежда няма капацитета да има правилно страниране от страна на клиента, използвайки части от данни, само с цял набор от данни. - person S. Buda; 30.09.2014
comment
Да - съжалявам - просто не познавам този плъгин много добре. - person Raymond Camden; 01.10.2014