AddItemAt () из arraycollection не работает во flex - PullRequest
1 голос
/ 01 августа 2011

Я пытаюсь добавить элемент в arraycollection, который сортируется и фильтруется с использованием addItemAt (). Но addItemAt () не добавляет элемент в указанный индекс. Кто-нибудь знает решение вышеуказанной проблемы.

Ответы [ 3 ]

5 голосов
/ 01 августа 2011

Я пытаюсь добавить элемент в arraycollection, который отсортирован и фильтруется

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

Вы можете удалить сортировку, чтобы заблокировать новый элемент по указанному вами индексу. С головы до головы, сделай так:

arrayCollection.sort = null;
arrayCollection.refresh();

Я почти уверен, что та же концепция применима к фильтрации. Если к коллекции применяется фильтр, новый элемент должен соответствовать критериям фильтра, иначе он не будет отображаться в коллекции до тех пор, пока фильтр не будет удален.

1 голос
/ 08 декабря 2011

У меня была проблема, похожая на это только в Flex 3 и с отсортированной ArrayCollection. Если вы обыскиваете, вы обнаружите, что addItemAt не работает с отсортированной коллекцией ArrayCollection (и если она не отфильтрована? Не знаю). Товар будет добавлен в соответствии с критериями сортировки.

Однако мне понадобилась отсортированная коллекция ArrayCollection (alpha) с опцией «Выбрать все» вверху, поэтому я продолжил:

Массив можно легко отсортировать (array.sort), поэтому я сначала создал массив. Затем я закрепил ArrayCollection и добавил элемент из ArrayCollection, по которому я хотел отсортировать массив. Этот новый массив был затем отсортирован.

Вновь отсортированный массив был зациклен, а внутри этого цикла ArrayCollection снова зациклен. Если совпадение было найдено в отсортированном элементе, я добавил этот объект в новую коллекцию ArrayCollection, но также создал новое свойство добавленного объекта, называемое «sortOrder», для которого было установлено количество циклов.

Затем объект «Выбрать все» был создан, и его sortOrder установлен в -1.

Наконец, числовая сортировка была создана в поле sortOrder ArrayCollection и вуаля - это сработало.

Возможно, у кого-то есть более элегантное решение, но я торопился, и это сработало, черт побери.

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 01 августа 2011
addItemAt() is adding item to the specified index.

* например: *

    <fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        [Bindable]
        private var myArray:ArrayCollection= new ArrayCollection([
            {student:'one',subject:'2'},
            {student:'two',subject:'4'},
            {student:'three',subject:'5'},
            {student:'four',subject:'6'}
        ]);

        protected function addArrayCollectioninRuntime(event:MouseEvent):void
        {
            myArray.addItemAt({student:nameTxtinput.text,subject:subjectTxtinput.text},3);


        }

    ]]>
</fx:Script>
<s:layout>
    <s:VerticalLayout/>
</s:layout>
<s:Form>
    <s:FormItem label="Student Name :">
        <s:TextInput id="nameTxtinput"/>
    </s:FormItem>
    <s:FormItem label="Student Subject :">
        <s:TextInput id="subjectTxtinput" />
    </s:FormItem>
    <s:Button label="Submit" click="addArrayCollectioninRuntime(event)"/>
</s:Form>
<mx:DataGrid dataProvider="{myArray}" id="dGrid" >
    <mx:columns>
        <mx:DataGridColumn dataField="student" id="stud"/>
        <mx:DataGridColumn dataField="subject" id="sub"/>
    </mx:columns>
</mx:DataGrid>
...