【问题标题】:Flex ArrayCollection - accesing object methods / attributes?Flex ArrayCollection - 访问对象方法/属性?
【发布时间】:2011-06-18 00:18:13
【问题描述】:

也许我没有明白ArrayCollection的真正含义,但首先是一些代码

public var test1:AkwRep = new AkwRep(1,200,200,2,86,2010,2012,334342,"Typ","Standort","Testname","url","owner",true);

// Objekte in ein Array
public var akwArray:Array = new Array(15);

public function addAkw():void {
    akwArray[0] = test1;
}

public var akwList:ArrayCollection = new ArrayCollection(akwArray);

(akw 表示 Atomkraftwerk -> 核电站;))

所以我有一个带有 akwRep-Objects 的数组。对于数据绑定,我将其放入 ArrayCollection。 到目前为止没有问题。但现在我想做类似的事情

<s:Label text={akwList.getItemAt(0).getAkwName()} />

而 getAkwName 是 AkwRep.as 中的一个方法,它返回一个字符串。但这不起作用 - 我无法通过 ArrayCollection 访问任何方法或属性。

有解决办法吗?如果我尝试使用数组,flexbuilder 说他不能使用 akwArray[0] 进行数据绑定 ...

编辑:一些新代码

这是在我的主应用程序的&lt;fx:script&gt; 标记中

[Bindable]
// AKW-Objekte erstellen
public var test1:AkwRep = new AkwRep(1,200,200,2,86,2010,2012,334342,"Typ","Standort","Testname","url","owner",true);

[Bindable]
// Objekte in ein Array
public var akwArray:Array = new Array(15);

public function addAkw():void {
    akwArray[0] = test1;
}

[Bindable]
public var akwList:ArrayCollection = new ArrayCollection(akwArray);

public function init():void{
    trace(akwList.getItemAt(0));
}

这是我的 AkwRep.as

public class AkwRep
{
    // Attribute
    // some more attributes right here

    public var typ:String;
    public var standort:String;
    private var akwName:String;

    [Bindable]
    public function get AkwName():String {
        return this.akwName;
    }

    // Konstruktoren
    public function AkwRep(id:Number, x:Number, y:Number, alter:Number, amNetz:Number, offOhneVerl:Number, offMitVerl:Number, leistung:Number, typ:String, standort:String, akwName:String, wikiurl:String, owner:String, moratorium:Boolean) [...]

【问题讨论】:

    标签: apache-flex adobe arraycollection


    【解决方案1】:
    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
                   xmlns:s="library://ns.adobe.com/flex/spark"
                   creationComplete="init()" xmlns:mx="library://ns.adobe.com/flex/mx">
        <fx:Script>
            <![CDATA[
                import mx.collections.ArrayCollection;
    
                [Bindable]
                public var akwList:ArrayCollection = new ArrayCollection();
                public var test1:AkwRep = new AkwRep(1,"Testname");
    
                public function addAkw():void {
                    akwList.addItem(test1);
                }
    
            ]]>
        </fx:Script>
    
        <mx:VBox>
            <s:Label text="{AkwRep(akwList.getItemAt(0)).akwName}" />
            <s:Button click="addAkw();" label="Add" />
        </mx:VBox>
    </s:Application>
    

    在 MXML 中

    package {
    
        [Bindable]
        public class AkwRep {
    
            private var _akwName:String;
    
            public function get akwName():String {
                return "Name: " + _akwName;
            }
    
            public function AkwRep(id:Number, akwName:String) {
                _akwName = akwName;
            }
        }
    }
    

    在 AkwRep.as 中

    【讨论】:

    • 首先感谢你 :) 我的整个 AkwRep.as 是可绑定的。 “_”有什么原因吗?
    • "_" 通常用于使用 get/set 函数的变量。这只是一个标准你。如果您查看 adobe 发出的 flex sdk 库。你会在几乎每一堂课中看到它的出现;)
    • 您的 akwList 声明上方有 [Bindable] 标签?
    • 跳过数组! ;) 只需使用 ArrayCollection 就可以了。我在答案末尾添加了代码以说明我的意思。
    • 基本上你添加到一个数组,但该数组没有绑定到任何东西。当您创建 ArrayCollection 时,它会复制它不复制数组的值。因此,在创建 ArrayCollection 后添加到 Array 的任何新值都不会添加到 Collection 中;)
    猜你喜欢
    • 2019-06-02
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    相关资源
    最近更新 更多