2008-12-23 71 views

回答

2

沒有理由,它不存在,它只是不存在。如果將代碼更改爲使用簡單的Array而不是ArrayCollection,則可以使用Array.concat方法。否則,唯一的選擇是循環中的addItem

-2

經過一番調查後,事實證明ArrayCollection只是一個數組的封裝,並且您可以通過arrcoll1.source訪問該數組。這可以讓你調用concat。我能夠刪除我的for循環,並用它來代替。

var arrColl1 = new ArrayCollection(['x','y','z']); 
var arrColl2 = new ArrayCollection(['a', 'b', 'c']); 

arrColl1.source = arColl1.source.concat(arrColl2.source); 

如果您串聯列表中的一個陣列,例如selectedItems,你可以這樣做:

arrColl1.source = arrColl1.source.concat(seletedItems); 
+0

您應該再次閱讀文檔。 「ArrayCollection對象不表示您直接對源數組所做的任何更改,請始終使用ICollectionView或IList方法修改該集合。」 – Tmdean 2008-12-23 20:42:13

2

舉例來說,嘗試下探到一個容器中這一點。從本質上講,似乎如果你必須有一個班輪,創建一個新的ArrayCollection與原始來源加上新的數據將工作,至少在下面的情況。嘗試直接操作源代碼看起來並不是非常有用,至少對於數據綁定的目的來說(如果不涉及數據綁定或事件,則可能更適合使用數組)。

<mx:Script> 
    <![CDATA[ 
     import mx.collections.ArrayCollection; 
     [Bindable] public var collection:ArrayCollection = new ArrayCollection([ 
      2,6,4,6,7,8,9 
     ]); 

     public function addToCollection():void { 
      collection.addItem(Number(collectionValue.text)); 
     } 

     public function newCollectionWithAddition():void { 
      collection = new ArrayCollection(collection.source.concat(Number(collectionValue2.text))); 
     } 

     public function addToCollectionSource():void { 
      collection.source.push(Number(sourceValue)); 
     } 

     public function addToCollectionSourceWithRefresh():void { 
      collection.source.push(Number(sourceValue2)); 
      collection.refresh(); 
     } 
    ]]> 
</mx:Script> 

<mx:HBox width="100%"> 
    <mx:PieChart width="300" height="300"> 
     <mx:series> 
      <mx:PieSeries dataProvider="{ collection }" /> 
     </mx:series> 
    </mx:PieChart> 
    <mx:PieChart width="300" height="300"> 
     <mx:series> 
      <mx:PieSeries dataProvider="{ collection.source }" /> 
     </mx:series> 
    </mx:PieChart> 
</mx:HBox> 

<mx:HBox> 
    <mx:TextInput id="collectionValue" /> 
    <mx:Button label="Add To ArrayCollection" 
     click="addToCollection()" 
     /> 
</mx:HBox> 

<mx:HBox> 
    <mx:TextInput id="collectionValue2" /> 
    <mx:Button label="Create New ArrayCollection with new value" 
     click="newCollectionWithAddition()" 
     /> 
</mx:HBox> 

<mx:HBox> 
    <mx:TextInput id="sourceValue" /> 
    <mx:Button label="Add To ArrayCollection Source" 
     click="addToCollectionSource()" 
     /> 
</mx:HBox> 

<mx:HBox> 
    <mx:TextInput id="sourceValue2" /> 
    <mx:Button label="Add To ArrayCollection Source with refresh" 
     click="addToCollectionSourceWithRefresh()" 
     /> 
</mx:HBox> 
4

我可以添加一些歷史的細微差別。顯然,Adobe聽到了Flex社區的迴應。 Flex 3.4 SDK中的ListCollectionView類型添加了addAll(addList:IList)方法。

但是爲了以防萬一有其他人誰可能仍然在尋找一個班輪相當於是全線的作品,這是我的一個很長的線去它:

var arrColl1 = new ArrayCollection(['x','y','z']); 
var arrColl2 = new ArrayCollection(['a', 'b', 'c']); 

// Using Flex SDK version 3.4: 
arrColl1.addAll(arrColl2); 

// Using any Flex SDK: 
arrColl2.source.forEach(function(item:*, i:int, arr:Array):void { arrColl1.addItem(item); }, this); 

這本質上是Flex實現的功能,並且應該正確處理綁定關注點,儘管它並不一定是最好看的。

相關問題