• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Dgrid, Dstore

M

motogarri

Кто-то пробовал прикрутить к xpage? Как-то странно у меня работает. Грид не подгружает данные из рест-сервиса по мере прокрутки. Он хочет сразу всё.
Есть на странице xe:viewJsonService. Если не указывать ему count, сервис грузит только 10 строк из вьюшки. Прокрутка грида никак не инициирует подгрузку следующих строк.
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex" styleClass="claro">

    <xp:this.resources>
        <xp:dojoModulePath prefix="dstore" url="/dstore"></xp:dojoModulePath>
        <xp:dojoModulePath prefix="dgrid" url="/dgrid"></xp:dojoModulePath>
        <xp:styleSheet href="/dgrid/css/dgrid.css"></xp:styleSheet>
        <xp:styleSheet href="/dgrid/css/skins/claro.css"></xp:styleSheet>
    </xp:this.resources>
   
    <xe:restService id="rs" pathInfo="rs">
        <xe:this.service>
            <xe:viewJsonService viewName="web_names" count="2000">
                <xe:this.columns>
                    <xe:restViewColumn columnName="LN" name="ln"></xe:restViewColumn>
                    <xe:restViewColumn columnName="FN" name="fn"></xe:restViewColumn>
                    <xe:restViewColumn columnName="MN" name="mn"></xe:restViewColumn>
                </xe:this.columns>
            </xe:viewJsonService>
        </xe:this.service>
    </xe:restService>

    <div id="grid" styleClass="dgrid" style="margin:5% 8%"></div>

    <script>
        require([
            'dstore/RequestMemory',
            'dgrid/OnDemandGrid'
        ], function (RequestMemory, OnDemandGrid) {
            var grid = new OnDemandGrid({
                collection: new RequestMemory({ target: 'dgrid.xsp/rs' }),
                columns: {
                    ln: 'Last Name',
                    fn: 'First Name',
                    mn: 'Middle Name'
                }
            }, 'grid');
        
            grid.startup();
        });
    </script>
   
</xp:view>
 
R

romych2004

За это по-моему сторе отвечает. Глянь в запросах к серверу - что он запрашивает и подставляет ли параметры каунт и т.п.

p.s. каунт не указывай, теоретически там либо грид, либо стор сам должен подсунуть параметр
 
M

motogarri

Каунт убрал. Сервер возвращает
Content-Range:items 0-9/514
и 10 айтемов джисона. Вроде так и должно быть. Но при прокрутке дополнительные запросы не отправляются на сервер. Мне кажется тут проблема в связке dstore и viewJsonService.
Я думал, может кто сталкивался. Грид неплохой. Приятней dojo data grid
[doublepost=1486331305,1486129650][/doublepost]В общем, как я понял они специально так сделали... При обращении к сервису грузятся все данные в оперативку. Считают, что так проще фильтровать, сортировать, показывать итоговую строку, быстрей отрисовываются строки при прокрутке.
Чтобы подгружать данные постепенно, нужны танцы со сторями:
JavaScript:
            require([
                "dojo/_base/lang",
                "dgrid/OnDemandGrid",
                "dojo/_base/declare",
                "dstore/Rest",
                "dstore/Trackable",
                "dstore/Cache"
            ], function(lang, OnDemandGrid, declare, Rest, Trackable, Cache){
                var store = new declare([ Rest, Trackable, Cache ])(
                    lang.mixin(
                        {target:"dgrid.xsp/rs"},
                        {useRangeHeaders: true}
                    )
                );
                var grid = new OnDemandGrid({
                    collection: store,
                    columns: {
                        ln: 'Last Name',
                        fn: 'First Name',
                        mn: 'Middle Name'
                    }
                }, "grid");
                grid.startup();
            });
При этом, естественно, сортировка на стороне клиента перестает работать, фильтры тоже. То есть это ещё думать надо, как сортировку прикручивать.
[doublepost=1486332192][/doublepost]Не пойму в чем прикол. В dojo говорят, что это новое поколение грида, что так сейчас модно. У меня по 100-мегабитной локалке 1500 строк из вьюшки тянутся рест-сервисом 15-18 секунд. А если строк будет 100000, совсем все умрет? (( Или я что-то не понимаю. Кто-то работал с другими фрейворками? Как сейчас на самом деле модно?
 
R

romych2004

Я же сказал что наверно не тот стор используется :)

Ну он и правда модный. Его фишка в новомодном "сколько данных видим, столько и отрисовываем". Т.е. если у вас 1000 строк загружено, а отображается только 20, то в HTML именно 20 и будет(+ несколько строк, чтобы при скроле сразу показывать). И по мере прокрутки он удаляет старые/добавляет новые строки.
Сортировать придется на сервере, либо загружать все данные(все данные грузить мне кажется очень плохой вариант)
При клике на колонку он должен отправлять параметр sort (посмотрите пример ниже). У реста укажите что-то вроде sortColumn=#{param.sort}, ну либо высчитывать на основе param.sort колонку, в которой нужно сортировать(при этом в настройках вьюшки эта колонка должна быть сортированной при клике)

Грид может и неплохой, но надо разбираться, а с доджо разбираться сложнее, т.к. коммунити не особо большое.. Но в целом, если постигнешь этот дзен - дальше будет не так сложно разбираться :)


Вот базовый пример :

UPD: Форумный движок не пропустил код, прикрепил файлом..
 

Вложения

  • new-19.txt
    2,3 КБ · Просмотры: 607
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!