返回值而不是null

时间:2010-09-21 08:27:59

标签: flex actionscript mxml

我正在尝试调用一个函数并将一些属性传递给它但是它抱怨我尝试定位的对象为null。谁能看到我错在哪里?

<mx:ViewStack id="vs" width="100%" height="100%" y="53"> 
    <mx:Canvas id="view1" label="Community" width="100%" height="100%" backgroundColor="#ff9900" showEffect="WipeDown" hideEffect="WipeUp">
        <mx:Label text="Community"/>
    </mx:Canvas>
    <mx:Canvas id="view2" label="Apps" width="100%" height="100%" backgroundColor="green">
        <mx:HTML id="myHTML" width="100%" height="100%" 
        visible="true"
        paintsDefaultBackground="true"
        htmlRender="browser_completeHandler(event)"
        locationChange="browser_locationChangeHandler(event)"
        complete="browser_completeHandler(event)" />
    </mx:Canvas>
</mx:ViewStack>


<local:DockBar id="dockbar" horizontalCenter="0" bottom="0" width="100%" height="100" minSize="32" maxSize="80">
    <mx:Label visible="false" id="menuLabel" text="Menu" bottom="0" horizontalCenter="0" fontSize="24" color="#ffffff" alpha=".75" />
    <mx:Image click="gotoApp('Google','http://www.google.com/')" source="{icon1}" buttonMode="true" useHandCursor="true" toolTip="Nice red" rollOver="turnOn(event)" rollOut="turnOff(event)" />
    <mx:Image click="gotoApp('Yahoo','http://www.yahoo.com/')" source="{icon2}" buttonMode="true" useHandCursor="true" toolTip="Cool orange" rollOver="turnOn(event)" rollOut="turnOff(event)" />
    </mx:HBox>
</local:DockBar>

,功能如下:

private function gotoApp(id:String,url:String):void {
    vs.selectedChild=view4;
    trace(myHTML);
}

我第一次单击图像时返回null,但后续尝试会跟踪一个值(我假设因为它已经设置好了,而不是当应用程序加载时)。任何想法如何在应用加载时识别它?

干杯

4 个答案:

答案 0 :(得分:1)

“view4”不是你的viewstack的子节点,所以当它试图移动它的子节点时它会抛出一个空指针。

它第二次不扔它的原因可能是由于类似

public function set selectedChild( child : Object ) : void {
    if ( child == _selectedChild ) return;
    ...
}

这是制定者中非常常见的模式。

答案 1 :(得分:1)

假设“view4”是拼写错误并且您的意思是“view2”,您可以将ViewStack上的creationPolicy设置为“all”。默认情况下,ViewStacks仅在创建时实例化第一个视图,将creationPolicy设置为“all”将强制实例化堆栈中的所有视图。

答案 2 :(得分:1)

默认情况下,ViewStack将按文档顺序懒惰地创建子​​节点,因此只有在加载时可见的第一个子节点(即view1)才会在函数中具有空id。对ViewStack的后续点击将创建其他视图(view2,view3和view4),这就是错误将不再发生的原因。

因此,您需要修改代码以包含creationPolicy =“all”来解决此问题:

<mx:ViewStack id="vs" creationPolicy="all" width="100%" height="100%" y="53"> 
    <mx:Canvas id="view1" label="Community" width="100%" height="100%"> 
        ...  
    </mx:Canvas>
        ...
    <mx:Canvas id="view4" label="Apps" width="100%" height="100%">
        ...
    </mx:Canvas>
</mx:ViewStack>

答案 3 :(得分:0)

尝试使用selectedIndex属性进行设置:

vs.selectedIndex = 1;

通过这种方式,您不会失去延迟实例化的好处。