首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用indexOf访问dataProvider

使用indexOf访问dataProvider
EN

Stack Overflow用户
提问于 2009-06-12 19:36:14
回答 3查看 2K关注 0票数 1

我有一个list对象,我正在通过dataProvider用addItem向它添加条目。

在将项目添加到列表之前,我想确保它不是重复的。我尝试过在dataProvider上使用indexOf,但它返回null。我尝试将其转换为数组,但始终返回-1,即使该元素存在于dataProvider中也是如此。

我唯一能使用的方法似乎有点老套,我想知道是否有更好的方法在dataProvider中查找元素。

代码语言:javascript
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-13 04:39:17

即使将数组提供给dataProvider属性,基础数组的类型始终是ArrayCollection,而不是dataProvider。它支持数组作为输入,但使用构造函数将其转换为ArrayCollection:

代码语言:javascript
复制
ArrayCollection(source:Array)

您可以使用以下方法:

代码语言:javascript
复制
ArrayCollection.contains(item:Object):Boolean 

以确保不会添加重复的项目。

票数 4
EN

Stack Overflow用户

发布于 2009-06-12 20:04:08

如果您希望列表随着底层数据的更改而更改,则需要使用ArrayCollection而不是数组。

您的问题似乎是使用toString()函数。它应该是:

代码语言:javascript
复制
var arr:Array = testList.dataProvider as Array;
if(arr)
{
    if(arr.indexOf("banana") > -1)
        trace("found");
}

在执行dataProvider.toString()时,将数组转换为字符串,然后搜索该字符串。

此外,数组没有addItem()函数,您需要使用push()。addItem是针对ArrayCollections的。

票数 0
EN

Stack Overflow用户

发布于 2009-06-13 05:00:40

您仍然可以使用数组,但它不会像ArrayCollection那样是动态的……

代码语言:javascript
复制
public function addToArray(item:String):void {
    if (testListArray.indexOf(item) < 0){
       testListArray.push(item);
       testList.dataProvider = testListArray;
     } 
}

只有在创建list控件之后添加数据时,才需要调用此方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/988630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档