Flex List ограничивает количество элементов

Можно ли определить свойство для ограничения количества элементов, которые будут отображаться в mx:List? Я читал об установке свойства rowCount, но не вижу никакого эффекта. Можно ли для этого применить фильтр? Мое намерение состояло в том, чтобы не удалять элементы из коллекции списка/массива, а просто «скрыть» их. Можно ли это сделать?


person Rui    schedule 09.03.2012    source источник


Ответы (2)


Другой вариант — использовать новую коллекцию массивов и получить ограниченные элементы из большой коллекции массивов:

//get first 10 elements
myArrayCollection = new ArrayCollection( myBigArrayCollection.toArray().slice(0,9) );

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

//this is just a (very) simple example
//page = integer (counter) for knowing which page the user is on
page = 0;
page_low = page*10;
page_high = page_low + 9;
myArrayCollection = new ArrayCollection( myBigArrayCollection.toArray().slice(page_low,page_high) );

(по-прежнему использование фильтра является более элегантным решением)

person Jozzeh    schedule 09.03.2012

Вы можете «скрыть» элементы от отображения в классе на основе списка без изменения базовых исходных данных, используя класс Collection, такой как ArrayCollection, и фильтруя данные.

Прочитайте эти документы по фильтрации коллекций.

Цитировать:

Вы используете функцию фильтра, чтобы ограничить представление данных в коллекции подмножеством исходного объекта данных. Функция должна принимать один параметр Object, соответствующий элементу коллекции, и должна возвращать логическое значение, указывающее, следует ли включать элемент в представление. Как и при сортировке, когда вы указываете или изменяете функцию фильтра, вы должны вызвать метод refresh() для коллекции, чтобы отобразить отфильтрованные результаты. Чтобы ограничить представление коллекции массива строк, чтобы оно содержало только строки, начинающиеся, например, с буквы M, используйте следующую функцию фильтра:

public function stateFilterFunc(item:Object):Boolean
{
    return item >= "M" && item < "N";
}
person JeffryHouser    schedule 09.03.2012
comment
Ему спасибо за комментарий. Однако я хочу фильтровать элементы на основе их позиций. В одном представлении я хочу показать первые 20, а в другом представлении я хочу показать их все. Могу ли я фильтровать на основе этого? - person Rui; 09.03.2012
comment
@Rui Я не знаю, что означает фильтр на основе их позиций. Если вы можете определить это; вы, вероятно, можете закодировать его. Вы используете один и тот же dataProvider для двух отдельных списков? - person JeffryHouser; 09.03.2012
comment
Я уже фильтрую элементы по дате. В одном штате я хочу, чтобы в моем списке были представлены первые 20 элементов, в другом штате я хочу показать их все. - person Rui; 09.03.2012
comment
Вы можете использовать originalCollection.getItemIndex(item) ‹ 20 в качестве условия в функции фильтра. Также, чтобы отметить rowCount, я считаю, что это способ установить высоту компонента в зависимости от того, сколько строк вы хотите видеть перед прокруткой. - person shaunhusain; 09.03.2012