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会修复它,但这让我更加困惑!我想我看到了这个问题;我会贴出完整的答案。