2011-08-01 50 views
1

我正在嘗試在使用addItemAt()進行排序和過濾的arraycollection中添加一個項目。 但addItemAt()不會將項目添加到指定的索引。 有誰知道上述問題的解決方案。arraycollection的AddItemAt()在flex中不起作用

+2

提供一些代碼。沒有一個例子,我們不能提供幫助。 – dtuckernet

+2

你有一些過濾功能的數組集合? – midhunhk

回答

5

我試圖在ArrayCollection中添加一個項目被分類和過濾

如果集合進行排序,當你添加一個新的項目,以它的過濾器會自動刷新。因此,您添加項目的索引可能不是您的項目結束的索引。這完全取決於排序算法。

您可以刪除排序以在您指定的索引處鎖定新項目。關閉我的頭頂,這樣做:

arrayCollection.sort = null; 
arrayCollection.refresh(); 

我敢肯定,同樣的概念也適用於過濾。如果將某個過濾器應用於集合,則新項目需要與過濾條件相匹配,否則在刪除過濾器之前它不會顯示在集合中。

+0

但是在刪除過濾器函數時,arraycollection恢復了我爲其添加了過濾器函數的完整數據。您可以給我解決方案。 – monica

+0

這是預期的行爲。 – JeffryHouser

0
addItemAt() is adding item to the specified index. 

*例如: *

<fx:Script> 
    <![CDATA[ 
     import mx.collections.ArrayCollection; 
     [Bindable] 
     private var myArray:ArrayCollection= new ArrayCollection([ 
      {student:'one',subject:'2'}, 
      {student:'two',subject:'4'}, 
      {student:'three',subject:'5'}, 
      {student:'four',subject:'6'} 
     ]); 

     protected function addArrayCollectioninRuntime(event:MouseEvent):void 
     { 
      myArray.addItemAt({student:nameTxtinput.text,subject:subjectTxtinput.text},3); 


     } 

    ]]> 
</fx:Script> 
<s:layout> 
    <s:VerticalLayout/> 
</s:layout> 
<s:Form> 
    <s:FormItem label="Student Name :"> 
     <s:TextInput id="nameTxtinput"/> 
    </s:FormItem> 
    <s:FormItem label="Student Subject :"> 
     <s:TextInput id="subjectTxtinput" /> 
    </s:FormItem> 
    <s:Button label="Submit" click="addArrayCollectioninRuntime(event)"/> 
</s:Form> 
<mx:DataGrid dataProvider="{myArray}" id="dGrid" > 
    <mx:columns> 
     <mx:DataGridColumn dataField="student" id="stud"/> 
     <mx:DataGridColumn dataField="subject" id="sub"/> 
    </mx:columns> 
</mx:DataGrid> 
+0

問題是AddItemAT不適用於已過濾的列表。 – monica

1

我只Flex 3中,並用一個有序的ArrayCollection有類同這是一個問題。如果你搜索,你會發現addItemAt不能用於排序的ArrayCollection(並且不會過濾?不知道)。該項目將根據排序標準添加。

但是,我需要一個有序的ArrayCollection(阿爾法),在頂部的「全選」選項,所以這是我是如何進行的:

數組可以很容易地(的Array.sort)排序,所以我首先創建一個數組。然後我打開了ArrayCollection並添加了ArrayCollection中我希望對該數組進行排序的項目。然後對這個新數組進行排序。

新排序的數組已循環並在此循環中ArrayCollection再次循環。如果在排序的項目上找到匹配項,我將此對象添加到新的ArrayCollection中,但也創建了一個名爲「sortOrder」的對象的新屬性,該屬性被設置爲循環計數。

接下來創建「全選」對象並將其sortOrder設置爲-1。

最後,數組排序是在ArrayCollection和Voila的sortOrder字段上創建的,它工作正常。

也許有人有一個更優雅的解決方案,但我很匆忙,它的工作有助於它。

希望這可以幫助別人。