我正在根据给定的 XML 元素将显示对象渲染到舞台,如您在此处看到的:
页面渲染器.as
private static var curElements:Dictionary = new Dictionary();
//renders the current page
private static function renderCode(pageCode:XML):void
{
if (pageCode)
{
//loop all elements from top to bottom
for each (var child:XML in pageCode.descendants())
{
var render:DisplayObject = ElementRenderer.render(child);
if (render)
{
WebBuilder.mainDisplay.addChild(render);
curElements[child] = render;
}
}
}
}
因此,每个 XML 元素都有一个关联的呈现形状。如果您有 XML 元素,则可以像这样访问形状: var shape:DisplayObject = curElements[xmlElement];
这在同一个班级中工作正常。
但是,现在我还有 ElementSelector 类,它处理形状的选择并将对形状所做的操作反映到 xml 元素。为此,需要在单击形状时获取 XML 元素:
元素选择器.as
private static var currentSelection:XML;
//fired when the stage has been clicked
private static function stageClicked(event:MouseEvent):void
{
//if the element selector has been enabled
if (enabled)
{
var allPages:Array = CodeHandler.getPageCodes();
var mainElement:XML = allPages[CodeHandler.getCurPageId()];
var targetElement:XML = CodeHandler.getDeepestElementAtPos(mainElement, 0, event.stageX, event.stageY)["xml"];
if ((targetElement.localName() != "page") && (targetElement != currentSelection))
{ //we have a new element selected
Utils.log("ElementSelector now selecting: " + targetElement.localName());
select(targetElement);
}
else if ((targetElement.localName() == "page") && (currentSelection))
{ //the selection has been lost
Utils.log("ElementSelector now dropping selection.");
deselect();
}
}
}
//sets the new selection
private static function select(element:XML):void
{
if (currentSelection) deselect();
currentSelection = element;
var curElements:Dictionary = PageRenderer.getElements();
var render:DisplayObject = curElements[element];
trace(render);
}
//drops the current selection
private static function deselect():void
{
currentSelection = null;
}
我添加了 StageClicked 事件函数只是为了让您了解我的过程是如何工作的。该功能本身工作正常。问题似乎出在 select() 方法中。
现在,奇怪的是,curElements[element] 返回 undefined 而 render 返回 null。
我试图像这样调试它(在选择方法的底部):
for (var key:Object in curElements)
{
if (key === element)
{
trace("key === element");
}
trace(curElements[key] === curElements[element]);
trace(curElements[key]);
trace(curElements[element]);
}
它返回:
key === element
false
[object Shape]
undefined
为什么会这样?如果 a === b,那么 dic[a] === dic[b],对吗?好吧,显然不是。
所以,钥匙真的在那里……它和它被设置的钥匙一样。
为什么它不返回关联显示对象?