Binding ArrayCollections of Arrays - PullRequest
       25

Binding ArrayCollections of Arrays

1 голос
/ 17 июля 2010

Я застрял в попытке организовать данные и связать их с повторителем в одном из моих приложений.Сначала я сохранил массив массивов, чтобы я мог легко получить доступ к любому значению.Но затем я понял, что мне нужно связать их с повторителем, поэтому мне пришлось переключиться на ArrayCollection массивов.Но проблемы привязки не были решены, так как внутри ArrayCollection все еще есть массивы (не привязываемые).Итак, что я могу сделать ??

Ниже приведен пример того, что я хочу сделать:

<mx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        [Bindable] public var arr:ArrayCollection = new ArrayCollection(
            [[              {v:"1", s:"f"}, {v:"1", s:"p"}, {v:"1", s:"c"}, {v:"1", s:"q"}
            ], [
                {v:"1", s:"f"}, {v:"1", s:"p"}, {v:"1", s:"c"}, {v:"1", s:"q"}
            ]]
        );
        protected function button1_clickHandler(event:MouseEvent):void
        {
            trace(arr.getItemAt(0).length);
             arr.getItemAt(0).splice(0, 1);
             trace(arr.getItemAt(0).length);
        }

    ]]>
</mx:Script>
<mx:HBox>


<mx:Repeater id="rep" dataProvider="{arr.getItemAt(0)}">
    <mx:Label text="{rep.currentItem.v}" />
</mx:Repeater>
    <mx:Button label="del" click="button1_clickHandler(event)" />
</mx:HBox>

трассы показывают, что размер массива изменяется, норетранслятор не обновляется.Любая идея??Какая лучшая практика?

1 Ответ

1 голос
/ 17 июля 2010

Привязка обновляет пункт назначения при изменении источника.В сложных объектах, таких как массив, этот источник является указателем на какую-то другую область памяти.В этой ситуации вы не меняете источник;только тот элемент, на который указывает источник.И поэтому привязка не будет иметь никакого влияния.

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

Внутри списка на основе класса;ваш dataProvider превращается в ListCollectionView;и он, в свою очередь, прослушивает событие CollectionChange вашего dataProvider для изменения отображаемых элементов при изменении элементов в dataProvider.У вас нет такого кода при использовании повторителя.

...