将标签绑定到对象属性

时间:2013-04-16 18:37:53

标签: object binding actionscript mxml

我正在做一个项目的介绍,我有一个类,爱因斯坦,有一个名字的属性。 name属性是私有的,但我有getter和setter。在mxml文件中,我有一个标签和一个按钮。标签显示爱因斯坦对象的名称。单击该按钮时,将更改Einstein对象的名称。由于标签绑定到name属性,它应该更新但不是。下面是爱因斯坦作为文件的部分和mxml文件,可能与问题有任何关系。

    [Bindable]
public class Einstein
{
    private var name:String;

    public function Einstein(name:String)
    {setName(name);}

    public function getName():String
    {return name;}

    public function setName(sentName:String):void
    {this.name = sentName;}
}

        <![CDATA[
        [Bindable]
        var pEinstein: Einstein = new Einstein("Brighid");
    ]]>

        <s:Label id="nameTag" text="{pEinstein.getName()}" fontSize="24"/>
        <s:Button content="change the name">
            <s:click>
                pEinstein.setName("Freyja");
            </s:click>

tldr;什么时候我的标签没有更新

2 个答案:

答案 0 :(得分:0)

我通常不会在flex中工作,但试试这个: (实际的getter / setter AS3语法)

public class Einstein
{
private var _name:String;

public function Einstein(name:String)
{setName(name);}

public function get name():String
{return _name;}

public function set name(value:String):void
{_name = value;}
}

<![CDATA[
    [Bindable]
    var pEinstein: Einstein = new Einstein("Brighid");
]]>

    <s:Label id="nameTag" text="{pEinstein.name}" fontSize="24"/>
    <s:Button content="change the name">
        <s:click>
            pEinstein.setName("Freyja");
        </s:click>

答案 1 :(得分:-1)

自动绑定不适用于'普通'方法。它适用于getter / setter,但是你需要为getter和setter使用actionscript语法。 (你的get / set函数看起来像我在java中使用的语法 - 这在actionscript中有效,但它们不会被mxml编译器识别为get / set)

将您的获取/设置功能更改为:

public function get name():String
{return name;}

public function set name(sentName:String):void
{this.name = sentName;}

将点击处理程序中的通话更改为:

pEinstein.name = "Freyja";

将标签更改为:

<s:Label id="nameTag" text="{pEinstein.name}" fontSize="24"/>