Переместить элементы в ArrayCollection - FLEX - PullRequest
0 голосов
/ 16 ноября 2009

Может ли кто-нибудь привести меня к сдвигу элемента в ArrayCollection в flex?

У меня есть ArrayCollection отсортированных объектов.

Теперь мне нужно переместить строку в конец ArrayCollection.

Для иллюстрации

arrayCollection = ["Cars","Other","Trucks"];

Эта коллекция ArrayCollection отсортирована. Теперь мне нужно переместить 'Other' в конец ArrayCollection. т.е. мне нужно, чтобы массив был реструктурирован как

arrayCollection  = ["Cars","Trucks","Other"]; 

Вот мой код,

if(Index != -1){ 
CategoryList.addItem(CategoryList.removeItemAt(Index)); 
trace(CategoryList.source.join());}

CategoryList - это ArrayCollection длиной 28 с 3 атрибутами для каждого объекта в ArrayCollection.

«RemoveItem» работает нормально, но «AddItem» выдает эту ошибку,

RangeError: Указанный индекс '28' находится за пределами. в mx.collections :: ArrayList / addItemAt () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ collection \ ArrayList.as: 305] в mx.collections :: ListCollectionView / addItemAt () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ collection \ ListCollectionView.as: 501] в mx.collections :: ListCollectionView / addItem () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ collection \ ListCollectionView.as: 470] в компонентах :: Home / creationOver () [C: \ Documents and Settings \ immanuel \ Мои документы \ Flex Builder 3 \ Porj \ src \ components \ Home.mxml: 113] в компонентах :: Home / ___ Home_Canvas1_creationComplete () [C: \ Документы и настройки \ immanuel \ Мои документы \ Flex Builder 3 \ Porj \ src \ components \ Home.mxml: 2] на flash.events::EventDispatcher/dispatchEventFunction () на flash.events::EventDispatcher/dispatchEvent () в mx.core :: UIComponent / dispatchEvent () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ core \ UIComponent.as: 9298] в mx.core :: UIComponent / set initialized () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ core \ UIComponent.as: 1169] в mx.managers :: LayoutManager / doPhasedInstantiation () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ Manager \ LayoutManager.as: 718] при функции / http://adobe.com/AS3/2006/builtin::apply() в mx.core :: UIComponent / callLaterDispatcher2 () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ core \ UIComponent.as: 8628] в mx.core :: UIComponent / callLaterDispatcher () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ core \ UIComponent.as: 8568]

Затем я пытаюсь вставить в определенную позицию,

CategoryList.addItemAt(CategoryList.removeItemAt(Index), CategoryList.length-1);

Но это, выдает ошибку ниже,

TypeError: Ошибка # 1006: значение не является функцией. в mx.collections :: ListCollectionView / getFilteredItemIndex () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ collection \ ListCollectionView.as: 564] в mx.collections :: ListCollectionView / addItemsToView () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ collection \ ListCollectionView.as: 896] в mx.collections :: ListCollectionView / listChangeHandler () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ collection \ ListCollectionView.as: 1051] на flash.events::EventDispatcher/dispatchEventFunction () на flash.events::EventDispatcher/dispatchEvent () в mx.collections :: ArrayList / internalDispatchEvent () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ collection \ ArrayList.as: 510] в mx.collections :: ArrayList / addItemAt () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ collection \ ArrayList.as: 311] в mx.collections :: ListCollectionView / addItemAt () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ collection \ ListCollectionView.as: 501] в компонентах :: Home / creationOver () [C: \ Documents and Settings \ immanuel \ Мои документы \ Flex Builder 3 \ Porj \ src \ components \ Home.mxml: 113] в компонентах :: Home / ___ Home_Canvas1_creationComplete () [C: \ Документы и настройки \ immanuel \ Мои документы \ Flex Builder 3 \ Porj \ src \ components \ Home.mxml: 2] на flash.events::EventDispatcher/dispatchEventFunction () на flash.events::EventDispatcher/dispatchEvent ()в mx.core :: UIComponent / dispatchEvent () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ core \ UIComponent.as: 9298] в mx.core :: UIComponent / set initialized () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ core \ UIComponent.as: 1169] в mx.managers :: LayoutManager / doPhasedInstantiation () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ Manager \ LayoutManager.as: 718] при функции / http://adobe.com/AS3/2006/builtin::apply() в mx.core :: UIComponent / callLaterDispatcher2 () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ core \ UIComponent.as: 8628] в mx.core :: UIComponent / callLaterDispatcher () [C: \ autobuild \ 3.2.0 \ frameworks \ projects \ framework \ src \ mx \ core \ UIComponent.as: 8568]

1 Ответ

3 голосов
/ 16 ноября 2009
var array:Array = ["Cars", "Other", "Trucks"];
pushToEnd(array, 1);

trace(array.join()); //Cars,Trucks,Other

/**
* Removes the item at 'index' and pushes it to the back of the array.
*/

function pushToEnd(array:Array, index:Number):void
{
  array.push(array.splice(index, 1)[0]);
}

Это проще с ArrayCollection

arrayCol.addItem(arrayCol.removeItemAt(index));

ОБНОВЛЕНИЕ: Рабочий образец - убедитесь сами.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" 
    creationComplete="create();">
    <mx:Button label="push" click="handle();"/>
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;

            private var ac:ArrayCollection;

            private function handle():void
            {
                ac.addItem(ac.removeItemAt(1));
                trace(ac.source.join());
            }

            private function create():void
            {
                ac = new ArrayCollection(["asd", "qwe", "zxc", "123"]);
                trace(ac.source.join());
            }
        ]]>
    </mx:Script>
</mx:Application>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...