在Actionscript中使用ArrayCollections時沒有任何可用的addAll()函數嗎?我一直在使用for循環使用addItem()逐個添加它們。這是常見的還是有更方便的方法?爲什麼Actionscript中沒有可用於ArrayCollections的addAll()函數?
2
A
回答
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);
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實現的功能,並且應該正確處理綁定關注點,儘管它並不一定是最好看的。
相關問題
- 1. 爲什麼Haskell中沒有用於函數的monoids類型?
- 2. Backbone.js爲什麼渲染函數中沒有可用的DOM?
- 3. 爲什麼函數沒有被調用?
- 4. 爲什麼vxWorks中沒有main()函數?
- 5. 爲什麼Haskell中沒有runConst函數?
- 6. 爲什麼FlexUnit中沒有assertError()函數?
- 7. actionscript函數中的線程是什麼?
- 8. 有沒有什麼辦法可以在函數中使用get_sidebar?
- 9. ArrayAdapter addAll函數似乎沒有被調用
- 10. 爲什麼沒有記錄jQuery.camelCase()函數?
- 11. 爲什麼Java 8沒有「myArray.stream()」函數?
- 12. 爲什麼C沒有snwprintf函數?
- 13. 爲什麼System.Data.SqlClient.SqlDataReader沒有構造函數
- 14. 爲什麼沒有定義函數javascript
- 15. 爲什麼沒有sample.default()函數
- 16. 爲什麼structs沒有析構函數?
- 17. 爲什麼沒有用於sqlite的VSS?
- 18. 爲什麼Inet * Address類沒有可見的構造函數?
- 19. 爲什麼PHP函數/方法中沒有「不可用參數」錯誤?
- 20. 有沒有什麼辦法從本地內容的actionscript執行js函數?
- 21. Typescript:爲什麼沒有參數的函數可以強制轉換爲參數
- 22. 爲什麼addAll清除ArrayList從中提取數據?
- 23. 將..._用作ActionScript 3.0函數中的參數列表有什麼作用?
- 24. 爲什麼沒有繼承的屬性可用於子類
- 25. 爲什麼沒有使用可變參數的List構造函數?
- 26. 爲什麼在ActionScript中沒有記錄drawRoundRectComplex()?
- 27. 爲什麼沒有在fill_n中調用移動構造函數
- 28. 爲什麼JavaScript中沒有調用()函數
- 29. 爲什麼IE中沒有調用回調函數($ .getJSON)?
- 30. Doctrine 2 ArrayCollections - 我錯過了什麼?
您應該再次閱讀文檔。 「ArrayCollection對象不表示您直接對源數組所做的任何更改,請始終使用ICollectionView或IList方法修改該集合。」 – Tmdean 2008-12-23 20:42:13