Flash Builder 4:Button包装在BorderContainer中时出现错误#1009

时间:2010-09-07 15:00:28

标签: flex actionscript-3 actionscript flex4 mxml

这真让我烦恼,但我有一个组件,其中Button包含在BorderContainer中。我在运行时将自定义属性传递给组件以更改按钮的标签,但Flex报告以下错误:

Cannot access a property or method of a null object reference

发生错误时,Flex会突出显示以下代码:

myButton.label = value;

这是应用程序:

// MyApp.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       xmlns:local="*">
    <local:MyComp id="myButton" label="My Button"/>
</s:WindowedApplication>

// MyComp.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                   xmlns:s="library://ns.adobe.com/flex/spark" 
                   xmlns:mx="library://ns.adobe.com/flex/mx"
                   width="400" height="300">
    <fx:Script>
        <![CDATA[
            private var _label:String;

            public function get label():String
            {
                return _label;
            }

            public function set label(value:String):void
            {
                _label = value;
                myButton.label = value;
            }
        ]]>
    </fx:Script>
    <s:Button id="myButton" label="Test"/>
</s:BorderContainer>

非常感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果第一次调用myButton属性的setter函数,则尚未创建label对象。将新标签值分配到myButton.label中的commitProperties()

您应该阅读About creating advanced components(最值得注意的是“关于组件实例化生命周期”)以了解原因。