2014-09-23 36 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> 

這裏是什麼fwctrl的MXML: 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 2014-09-23 15:33:54

回答

0

在Flex中,itemRenderer不是基於一對一的基礎數據集合創建的。您只能獲得足夠的實例來顯示一個屏幕的數據值,並且這些實例在滾動時會被重用。

要在代碼中處理此問題,請重構,以便itemRenderer中的click處理程序更新dataCollection中的屬性(例如data.foo = true;)。