我有一个list对象,我正在通过dataProvider用addItem向它添加条目。
在将项目添加到列表之前,我想确保它不是重复的。我尝试过在dataProvider上使用indexOf,但它返回null。我尝试将其转换为数组,但始终返回-1,即使该元素存在于dataProvider中也是如此。
我唯一能使用的方法似乎有点老套,我想知道是否有更好的方法在dataProvider中查找元素。
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" styleName="plain" applicationComplete="init()">
<mx:Script>
<![CDATA[
import mx.controls.List;
[Bindable]
public var testListArray:Array;
public function init():void
{
testList.dataProvider.addItem('test');
testList.dataProvider.addItem('banana');
//search for element in dataProvider
if(testList.dataProvider.toString().indexOf('banana') > -1)
{
trace('found');
}
//search for element in dataProvider
if(testList.dataProvider.toString().indexOf('goat') === -1)
{
trace('not found');
}
}
]]>
</mx:Script>
<mx:List dataProvider="{testListArray}" x="260" y="204" id="testList" borderStyle="solid" borderColor="#000000"></mx:List>
</mx:Application>发布于 2009-06-13 04:39:17
即使将数组提供给dataProvider属性,基础数组的类型始终是ArrayCollection,而不是dataProvider。它支持数组作为输入,但使用构造函数将其转换为ArrayCollection:
ArrayCollection(source:Array)您可以使用以下方法:
ArrayCollection.contains(item:Object):Boolean 以确保不会添加重复的项目。
发布于 2009-06-12 20:04:08
如果您希望列表随着底层数据的更改而更改,则需要使用ArrayCollection而不是数组。
您的问题似乎是使用toString()函数。它应该是:
var arr:Array = testList.dataProvider as Array;
if(arr)
{
if(arr.indexOf("banana") > -1)
trace("found");
}在执行dataProvider.toString()时,将数组转换为字符串,然后搜索该字符串。
此外,数组没有addItem()函数,您需要使用push()。addItem是针对ArrayCollections的。
发布于 2009-06-13 05:00:40
您仍然可以使用数组,但它不会像ArrayCollection那样是动态的……
public function addToArray(item:String):void {
if (testListArray.indexOf(item) < 0){
testListArray.push(item);
testList.dataProvider = testListArray;
}
}只有在创建list控件之后添加数据时,才需要调用此方法。
https://stackoverflow.com/questions/988630
复制相似问题