gpt4 book ai didi

apache-flex - 在 flex 中迭代 dataProvider

转载 作者:行者123 更新时间:2023-12-04 23:31:35 26 4
gpt4 key购买 nike

我想知道......我想在一个基于 DropDownList 的组件中遍历一个 dataProvider。
第一件事,它没有工作(它编译,但从未迭代),是:

var o:Object;
for each (var o:Object in dataProvider)
{
}

我猜它不起作用,因为 IList 不提供对象,或者有人能够轻松解释的东西。

从效率的角度来看,我尝试了一些看起来很糟糕的东西,但它确实有效。就是这个:
for (var i:int = 0; i < dataProvider.length; i++)
{
o = dataProvider.getItemAt(i);
}

但这太可怕了,以至于我很想在这里询问另一种可能的解决方案。

更新:

我将尝试详细说明...我正在制作(嗯,它已经制作好了)一个组件,它就像 DropDownList 一样,是可绑定(bind)的,而不是索引(如 selectedIndex="@{variable}"),但是到 ArrayCollection 内的变量的值。

假设您有一个带有两个对象的 dataProvider: {a:'5', nmb:'five', blabla:'cinco'}{a:'39', nmb:'thirty-nine', blabla:'treinta y nueve'} .

这个组件,如果这样声明:
<com:ddListN idxName="a" selectedN="@{val}" labelField="nmb">

是否使用 val将 DropDownList 设置/获取到正确的索引,将值与 idxName 中定义的变量进行比较。

好吧,这是整个代码(不是那么多):
<?xml version="1.0" encoding="utf-8"?>
<s:DropDownList xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
change="ch()">
<fx:Declarations>
</fx:Declarations>
<fx:Script>
<![CDATA[
private var _selectedN:String;

public var idxName:String = 'n';

[Bindable(event="changeSelected")]
public function get selectedN():String
{
return this.selectedItem[idxName];
}

public function set selectedN(v:String):void
{
var o:Object;
// for each (var o:Object in dataProvider) @@
for (var i:int = 0; i < this.dataProvider.length; i++)
{
o = dataProvider.getItemAt(i);
if (o[idxName] == v)
{
this.selectedIndex = i;
_selectedN = v;
dispatchEvent(new Event("changeSelected"));
return;
}

}
this.selectedItem = null; // no seleccionar nada (@@?)
_selectedN = null;
dispatchEvent(new Event("changeSelected"));
}

private function ch():void
{
_selectedN = this.selectedItem[idxName];
dispatchEvent(new Event("changeSelected"));
}
]]>
</fx:Script>
</s:DropDownList>

最佳答案

其实for each循环比正常慢一点for循环。看看For VS Foreach on Array performance的答案.

要回答您的问题,为什么您的 for each循环不起作用。不幸的是,这种类型的循环仅适用于某些类型的类。据我所知,这些是:

  • Array
  • Vector
  • XML
  • XMLList
  • 以及扩展 Proxy 的类实现 for each 所需的功能循环。 ListCollectionView及其子类ArrayCollectionXMLListCollection是我所知道的唯一一个。

  • 集合类如 ArrayList不使用 for each循环,因为它们不是 Flash Player 中的 native 对象(如 Array )并且它们不扩展 Proxy类(class)。

    所以,你能做的最好的事情就是使用简单的 for循环,这些循环甚至比 for each 还要快。循环。

    关于apache-flex - 在 flex 中迭代 dataProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4328052/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com