Почему мой flex-box itemrenderer обновляет неверный источник данных? - PullRequest
0 голосов
/ 17 марта 2012

У меня есть два списка листов, которые рисуют данные из коллекции массивов, назначенной для сетки данных:

<mx:TileList dataProvider="{myDatagrid.selectedItem.myColumnOne}">
 <mx:itemRenderer >
  <mx:Component>
   <mx:CheckBox label="{data.label}" selected="{data.selected}" click="{data.selected = this.selected}" />
  </mx:Component>
 </mx:itemRenderer>
</mx:TileList>

<mx:TileList dataProvider="{myDatagrid.selectedItem.myColumnTwo}" >
 <mx:itemRenderer >
  <mx:Component>
   <mx:CheckBox label="{data.label}" selected="{data.selected}" click="{data.selected = this.selected}" />
  </mx:Component>
 </mx:itemRenderer>
</mx:TileList>

Эти списки плиток отсутствуют в таблице данных - они находятся в форме редактирования.

И myColumnOne, и myColumnTwo имеют похожие данные:

{label: foo; выбранный: верно}
{label: bar; выбрано: false}
и т.д ...

Флажки заполняются правильно, когда данные загружаются в сетку. Проблема в том, что при проверке / снятии отметки, если одна и та же метка отображается в myColumnOne и myColumnTwo, обновляются оба столбца, а не только тот, который был нажат.

Есть ли какие-либо изменения в коде, которые заставили бы его вести себя правильно?

1 Ответ

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

Проблема в том, что они должны ссылаться на один и тот же базовый объект, вам нужно клонировать объекты, используемые для dataProviders для списка, просто наличие двух разных коллекций не означает, что объекты в коллекциях разные (это хорошо для производительности памяти, но не хорошо для вашего случая). Поэтому, где бы вы ни заполняли myColumnTwo и myColumnOne, вам действительно нужно делать «глубокую копию» объектов, которые туда помещаются, иначе они совместно используют память. Глубокая копия в терминах AS3 будет означать создание нового объекта (может быть строго типизировано, если это так) и копирование всех свойств из исходного объекта в новый клон.

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

...