附加的代码示例(伪代码)编译,但抛出此运行时错误:
TypeError: Error #2007: Parameter child must be non-null.
at flash.display::DisplayObjectContainer/getChildIndex()
at mx.core::Container/getChildIndex()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\Container.as:2409]
at mx.containers::ViewStack/set selectedChild()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\containers\ViewStack.as:557]
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
[Bindable]
private var targetViewName:String = "content";
]]>
</mx:Script>
<mx:ViewStack id="viewStack" width="100%" height="100%"
selectedChild="{Container(viewStack.getChildByName(targetViewName))}">
<mx:Panel id="welcome" width="100%" height="100%" />
<mx:Panel id="content" width="100%" height="100%" />
</mx:ViewStack>
</mx:Application>
有什么方法可以让我无需调用函数来设置selectedChild就能使用它?
感谢。
答案 0 :(得分:3)
当selectedChild被触发时,viewStack没有添加任何子节点,因此抛出NullPointerException:
以下内容可行:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.core.Container;
[Bindable]
private var targetViewName:String = "content";
private function onClick() : void
{
viewStack.selectedChild = Container(viewStack.getChildByName(targetViewName)) ;
}
]]>
</mx:Script>
<mx:ViewStack id="viewStack" width="100%" height="100%" >
<mx:Panel id="welcome" width="100%" height="100%" title="welcome"/>
<mx:Panel id="content" width="100%" height="100%" title="content" />
</mx:ViewStack>
<mx:Button click="onClick()" label="click" />
</mx:Application>
答案 1 :(得分:0)
尝试了这个:
selectedChild="{this[targetViewName]}">
/尼尔斯
答案 2 :(得分:0)
抱歉,/ Niels,这不起作用。尝试编译这段代码,你会看到selectedChild没有改变(你也得到了编译警告):
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
[Bindable]
private var targetViewName:String = "content";
]]>
</mx:Script>
<mx:TabNavigator id="viewStack" width="100%" height="100%" creationPolicy="all"
selectedChild="{this[targetViewName]}">
<mx:Panel id="welcome" width="100%" height="100%" label="welcome" />
<mx:Panel id="content" width="100%" height="100%" label="content" />
</mx:TabNavigator>
</mx:Application>
答案 3 :(得分:0)
我的猜测是,这不起作用,因为绑定将在初始化时进行评估,此时尚未创建视图堆栈的子节点。即使将creationPolicy设置为“all”,问题仍然存在。
创建视图堆栈时(或者也可能是其子窗口),您必须设置与targetViewName的绑定。
答案 4 :(得分:0)
一旦目标位于显示列表中,您就要设置selectedChild属性。试试这个:
<mx:TabNavigator id="viewStack" width="100%" height="100%" creationPolicy="all" >
<mx:Panel id="welcome" width="100%" height="100%" label="welcome" />
<mx:Panel id="content" width="100%" height="100%" label="content" addedToStage="viewStack.selectedChild = this" />
</mx:TabNavigator>
如果你真的想绑定selectedChild,那么创建一个可绑定的函数,返回你想要选择的面板,但前提是它只是viewStack的子节点。
答案 5 :(得分:0)
<mx:Script>
<![CDATA[
import models.ModelLocator;
[Bindable]
private var model:ModelLocator = ModelLocator.getInstance();
]]>
</mx:Script>
<mx:ViewStack id="videoViewStack" width="100%" height="100%" selectedChild="{this[model._videoViewStack]}" >
<viewsVideos:AllVideos id="AllVideos" label="Videos"/>
<viewsVideos:MainVideo id="MainVideo" label="Video"/>
</mx:ViewStack>
这会绑定一个字符串var我会收到警告,但它可以正常工作