- PVSM.RU - https://www.pvsm.ru -
Понадобилось мне в 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/
Нажмите здесь для печати.