我们正在为游戏构建界面。
界面在屏幕底部有一个标签式菜单,每个标签显示一个对象的不同方面(称为节点)。
当你点击其中一个部分时,它就成了焦点,我们用XML下载它的详细信息,包括它的所有子节点和父节点,然后相应地更新标签显示,或者至少这是我们的喜欢发生。
我们拥有什么:
MainInterface.mxml
<s:Application...
<fx:Script>
<![CDATA[
public var currentNode:Node = new Node();
protected function selectNodeHandler(event:Event):void
{
loader = new URLLoader(new URLRequest(ourWebSite + event.target.id + ".xml"))
//the xmlDownloaded function below is what changes the contents of currentNode
loader.addEventListener(Event.COMPLETE, xmlDownloaded);
...
<s:SkinnableContainer id="dashBoard"..
<mx:TabNavigator...
<s:NavigatorContent...
<s:SkinnableDataContainer ...
dataProvider="{currentNode.children}"
itemRenderer="renderers.NodeRenderer">
Node.as(valueObjects.Node)
...
[Bindable] public var id:String;
[Bindable] public var name:String;
[Bindable] public var children:ArrayCollection = new ArrayCollection();
[Bindable] public var parents:ArrayCollection = new ArrayCollection();
...
NodeRenderer.mxml(renderers.NodeRenderer)
<s:ItemRenderer ... click="nodeRenderer_clickHandler(event)">
<fx:Script>
<![CDATA[
protected function nodeRenderer_clickHandler(event:MouseEvent):void
{
var eventObject:Event = new Event ("nodeSelected");
dispatchEvent(eventObject);
}
...
<s:Label text = "{data.name}"/>
我们尝试将“selectNode”的事件监听器添加到dashBoard:您看到上面看到的SkinnableContainer,但它似乎不想采取。我们怀疑这是因为dashBoard来自一个spark组件而“selectNode”的调度程序是我们自己的自定义组件,但是我们不确定......在任何情况下代码辅助似乎表示我们必须手写。
我们不确定如何在FlashBuilder 4的调试器中获取事件,因此我们无法解决它出错的地方。基本上,当有人点击子节点或父节点的标签(由itemRenderer显示)时,我们希望将URLRequest发送到我们的网站,并点击特定于该节点的URL。然后我们想要一个URLLoader监听返回,当加载器调用xmlDownloaded时,它将更新公共变量'currentNode'。
如果您可以澄清应该如何调度click事件,那么应该监听它,然后发送URLRequest以及正在侦听要返回的xml数据的URLLoader将解决我们的问题。或者,如果有更好的(更常规的)方式来做我们正在尝试做的事情也会有所帮助,因为我们对actionscript和flex相对较新。
答案 0 :(得分:1)
protected function selectNodeHandler(url:String):void
{
loader = new URLLoader(new URLRequest(url));
//consider identifying the loader, for instance
loader.name = url; // you could also pass a second parameter
//to the function and assign it to the name property of the loader.
//the xmlDownloaded function below is what changes the contents of currentNode
loader.addEventListener(Event.COMPLETE, xmlDownloaded);
}
protected function nodeRenderer_clickHandler(event:MouseEvent):void
{
var url:String = ourWebSite + event.currentTarget.id + ".xml";
selectNodeHandler( url );
}
protected function xmlDownloaded( event:Event ):void
{
//identify the target here with the name property
var id:String = event.target.name;
}