Flex 4.6 Mobile - ItemRenderers и данные приложений - PullRequest
0 голосов
/ 20 марта 2012

Вопрос о ItemRenderers: допустим, у меня есть ArrayCollection, которая представляет собой данные моего приложения, расположенные внутри глобального объекта.Я заполняю список искр этими данными, устанавливая ArrayCollection в качестве dataProvider.

Таким образом, каждый ItemRenderer получает копию элемента, находящегося в массиве.Вы можете переопределить метод «set data», чтобы установить для данных нечто более специфичное для домена.Проблема в том, что данные являются копией исходного элемента.

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

Очевидно, что мы не сможем ничего сделать, еслимы работаем с копией, потому что она будет выброшена, как только ItemRenderer будет уничтожен, а исходный объект ничего не знает о том, что произошло.

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

{globalArrayCollection} .getItemAt (this.itemIndex)

Но это выглядит неуклюжемне.Есть ли лучший метод для борьбы с этим?

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Хм, почему вы думаете, что оригинальный ArrayCollection не изменится, если вы измените значения в itemRenderer? Для меня это работает, и первоначальные изменения ArrayCollection.

[Bindable]
protected var model:Model;

override public function set data(value:Object):void
{
    super.data = value; 
    this.model = value as Model;
}

protected function changeValue():void
{
    model.value = "newValue";
}

Или я что-то не так понял?

0 голосов
/ 20 марта 2012

Не уверен, что я следую, но звучит так, как будто вы пытаетесь найти средство изменения элементов для установки / изменения значения.

Вы можете получить прямой доступ к методу средства визуализации..

В вашем рендере:

public function setSomeValue(aValue:String):void{
     someString = aValue;

}

Вы также можете установить данные в ArrayCollection.

Чтобы получить доступ к этому методу, вы должны использовать это:

var dataGroup:DataGroup = list.dataGroup;
var itemRenderer:YourItemRenderer = dataGroup.getElementAt(list.selectedIndex) as YourItemRenderer;

itemRenderer.setSomeValue("string");
...