【问题标题】:Binding a label to an object property将标签绑定到对象属性
【发布时间】:2013-04-09 07:17:12
【问题描述】:

我正在介绍一个项目,其中我有一个类 Einstein,它具有名称属性。 name 属性是私有的,但我有它的 getter 和 setter。在 mxml 文件中,我有一个标签和一个按钮。标签显示 Einstein 对象的名称。单击该按钮时,Einstein 对象的名称将更改。由于标签绑定到名称属性,它应该更新但它不是。下面是 Einstein as 文件和 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;我的标签在它应该更新的时候没有更新

【问题讨论】:

    标签: object binding actionscript mxml


    【解决方案1】:

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

    将您的 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"/>
    

    【讨论】:

    • 谢谢!!!!完美运行!作为使用此解决方案的其他任何人的旁注,getter/setter 名称不能与变量的名称相同
    • 如果此解决方案适合您,请勾选旁边的绿色标记,将答案标记为“已接受”。这样其他人就会知道问题已得到解答。
    【解决方案2】:

    我通常不在 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-24
      • 2011-01-20
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      相关资源
      最近更新 更多