- PVSM.RU - https://www.pvsm.ru -

Lightswitch HTML Client. Итерация по всем элементам коллекции

Понадобилось мне в Lightswitch HTML Client перебрать на стороне клиента все элементы коллекции. Не спрашивайте почему — так хочет заказчик.

Основная проблема перебрать все записи коллекции это paging. Если отключить Support paging в настройках экрана, то все становиться очень просто:

    for (var i = 0; i < collection.data.length; i++) 
        MyFunc(collection.data[i]);

Но отключать по-страничную загрузку крайне не рекомендуется. Поиски по единственному вменяемому источнику [1] информации по Lightswitch привели к следующему решению. Мы будем использовать метод loadMore который позволяет подгрузить следующую страницу данных. Чтобы понять, есть ли еще перезагруженные элементы, мы используем свойство коллекции canLoadMore.

Получится следующий код:

function _IterateCollection(collection, recFunction, fromRecord) {
    var i = fromRecord;
    for (; i < collection.data.length; i++) 
        recFunction(collection.data[i]);
    if (collection.canLoadMore) {
        collection.loadMore(true).then(function (result) {
            _IterateCollection(collection, recFunction, i);
        });
    }
};
function IterateCollection(collection, recFunction) {
    _IterateCollection(collection, recFunction, 0);
}

Теперь метод IterateCollection можем задействовать в кнопке:

myapp.BrowseCustomers.MyButtonMethod_execute = function (screen) {
    IterateCollection(screen.Customers, function (rec) {
        console.log(rec);
    });
};

Подводные камни такого метода очевидны, когда данные коллекции прибиндены к элементу управления: для большой коллекции это может привести к out-of-memory. С другой стороны это избавляет вас от написания сложного кода, учитывающего все фильтры, примененные к этому набору данных

Напоследок полезная статья [2], которая помогла найти такое решение.

Автор: весёлый усач

Источник [3]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/249847

Ссылки в тексте:

[1] источнику: http://lightswitchhelpwebsite.com

[2] полезная статья: http://lightswitchhelpwebsite.com/Blog/tabid/61/EntryId/1200/Understanding-The-LightSwitch-HTML-Client-Visual-Collection.aspx

[3] Источник: http://habrahabr.ru/sandbox/107882/