2014-09-23 2 views
0

У меня, похоже, проблема с созданием элементов, как ожидалось, в результате чего не были запущены события-слушатели.Элементы в DataGrid не инициализированы, как ожидалось

Я использую столбец DataGrid флажков, как показано здесь: (. fwctrl это пространство имен внутренней библиотеки)

<mx:DataGrid id="gridComponents" height="100%"> 
    <mx:columns> 
     <fwctrl:DataGridCheckBoxColumn id="colChkBox" width="20" selectionChanged="onGridChbBoxChange(event)" /> 
     <mx:DataGridColumn headerText="Components" dataField="name" width="250"/> 
    </mx:columns> 
</mx:DataGrid> 

А вот что MXML из fwctrl: DataGridCheckBoxColumn выглядит следующим образом:

<mx:DataGridColumn xmlns:mx="http://www.adobe.com/2006/mxml" resizable="false" xmlns:grid="fwctrl.grid.*" xmlns:CheckBoxColumn="fwctrl.grid.CheckBoxColumn.*"> 
<mx:Metadata> 
    [Event(name="selectionChanged", type="fwctrl.grid.CheckBoxColumn.DataColumnCheckBoxEvent")] 
</mx:Metadata> 
<mx:Script> 
    <![CDATA[ 
     ... 

    ]]> 
</mx:Script> 
<mx:headerRenderer> 
    <mx:Component> 
     <CheckBoxColumn:CheckBoxHeaderRenderer textAlign="center" click="checkboxheaderrenderer1_clickHandler(event)"> 

      <mx:Script> 
      ... 
      </mx:Script> 
     </CheckBoxColumn:CheckBoxHeaderRenderer> 
    </mx:Component> 
</mx:headerRenderer> 
<mx:itemRenderer> 
    <mx:Component> 
     <mx:Box horizontalAlign="center" 
       verticalAlign="middle" enabled="{outerDocument.isEnabled}"> 
      <mx:Script> 
       <![CDATA[ 
        ...   


        protected function checkBox_initializeHandler(event:FlexEvent):void 
        { 
         trace("init checkbox"); 
        } 

       ]]> 
      </mx:Script> 
      <mx:CheckBox id="checkBox" click="onCheckBoxClick()" change="onChange(event)" initialize="checkBox_initializeHandler(event)"/> 
     </mx:Box> 
    </mx:Component> 
</mx:itemRenderer> 

CheckBoxHeaderRenderer - это класс, который наследуется от флажка.

с помощью MXML выше я связать ArrayCollection с данными обеспечивают, выполнив: gridComponents.dataProvider = coll;

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

В действительности, сообщение будет отображаться только для элемента, который не «выпадает из сетки», т. Е. Если имеется полоса прокрутки (из-за большого количества элементов, которые отображаются), элементы, которые находятся ниже нижней части сетки (т. е. те, которые нужно прокрутить) не будут печатать сообщение.

Это также означает, что они созданы неправильно и что click="onCheckBoxClick()" неправильно подключен и что onCheckBoxClick() не запускается.

Почему это происходит и как я могу это исправить?

+0

Не могли бы вы добавить более подробную информацию о своей функции dataProvider и вашей функции onCheckBoxClick()? Я могу предложить лучший совет, если вы опубликуете их тоже. – Brian

ответ

0

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

Чтобы обработать это в своем коде, рефакторинг, чтобы ваш обработчик click в itemRenderer обновил свойство в вашем наборе данных (например, data.foo = true;).

Смежные вопросы