【问题标题】:Flash Builder 4: Error #1009 in when Button is wrapped in BorderContainerFlash Builder 4:将 Button 包装在 BorderContainer 中时出现错误 #1009
【发布时间】:2010-09-07 15:00:27
【问题描述】:

这真的让我很烦,但是我有一个组件,其中一个 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>

任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: apache-flex actionscript-3 actionscript flex4 mxml


    【解决方案1】:

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

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

    【讨论】:

    • 如果我将 BorderContainer 重命名为 Group 并重试,它可以工作。 BorderContainer 导致此错误的任何原因?
    • 不知道。也许creationpolicy 不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多