Actionscript 3 在AdobeFlex中重写MXML组件中的setter
我试图覆盖标签组件中的文本设置器,但它的行为异常Actionscript 3 在AdobeFlex中重写MXML组件中的setter,actionscript-3,apache-flex,actionscript,air,adobe,Actionscript 3,Apache Flex,Actionscript,Air,Adobe,我试图覆盖标签组件中的文本设置器,但它的行为异常 有时超级文本有效,有时无效!跟踪显示我的代码没有错误 这是我的密码: import spark.components.Label; public class LabelXX extends Label { private var _initialText:String; private var _assignedText:String; public function LabelXX() { su
有时超级文本有效,有时无效!跟踪显示我的代码没有错误 这是我的密码:
import spark.components.Label;
public class LabelXX extends Label
{
private var _initialText:String;
private var _assignedText:String;
public function LabelXX()
{
super();
}
override public function set text(value:String):void
{
if (!_initialText)
{
_initialText = value;
super.text = value;
trace("initial text = " + value);
}else
{
_assignedText = value;
super.text = _initialText + " " + _assignedText;
trace("Now: " + _initialText + " " + _assignedText);
}
//this wont have any effect no matter what I do:
//super.text = "test test test";
}
override public function get text():String
{
if (!_assignedText)
{
return "";
}else
{
return _assignedText;
}
}
}
更新:如果我对getter进行评论,它工作正常,但仍然没有任何意义
谢谢超级get/set方法很可能正在访问保存属性值的某个私有变量。您的扩展类无法访问此私有变量。通过重写get方法以从不调用super;在set方法中使用它时,您可能会遇到一些奇怪的情况。尤其是当父级中的任何内容正在访问私有变量并绕过get/set方法时。不幸的是,这在Flex框架代码中偶尔会发生。因此,我可能会尝试将您的代码重新编译为如下内容:
private var _initialText:String;
private var _assignedText:String;
override public function set text(value:String):void
{
if (!_initialText)
{
_initialText = value;
super.text = value;
trace("initial text = " + value);
}else
{
_assignedText = value;
// change here to reference value not _assignedText
super.text = _initialText + " " + value;
trace("Now: " + _initialText + " " + value);
}
//this wont have any effect no matter what I do:
//super.text = "test test test";
}
override public function get text():String
{
if (!_assignedText)
{
return "";
}else
{
// change here to reference super.text not _assignedText
return super.text;
}
}
“有时超文本有效,有时无效!”你能详细解释一下吗?如果我们不知道什么是错误的,我们就帮不了你。我的意思是,在一些随机情况下,它会显示结果文本,我真的无法解释更多,因为我不明白发生了什么,如果我取消注释super.text=“test”,在上面的代码中,它是完全随机的;即使我删除函数中的所有其他内容,它也不会有任何效果,,,,刚才我发现删除getter override会修复它,但这让我更加困惑!我想我看到了这个问题;我会贴出完整的答案。