我正在做一个项目的介绍,我有一个类,爱因斯坦,有一个名字的属性。 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;什么时候我的标签没有更新
答案 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"/>