这是关于 OpenLaszlo(或者更确切地说是 Flex?)内部的问题:
我能够将完整的 Flex 应用程序 swf 加载到 OpenLaszlo 中(主干版本,旧版本失败)。它可以在 Flash 10 和 11 中工作。但 OpenLaszlo 似乎可以捕获或阻止某些鼠标事件。当我将 SWF 添加到
YFilesSWF.content.sprite (YFilesSWF is extending the window class)
然后大多数鼠标操作都可以工作(例如 Flex 按钮),但有些则不行(一些可点击的项目在画布上)。我进一步观察到,当我将 SWF 添加到
YFilesSWF.sprite (YFilesSWF is extending the view)
,则 SWF 不再对任何鼠标事件作出反应。这意味着窗口稍微好一些,但还不够好。我正在使用
flash.display.Loader
用于以正常方式加载 SWF 的类。这是我用于加载 swf 的 AS3 Loader 类实现,它包含在 OpenLaszlo 应用程序中:
public class LoadSwf extends Sprite
{
public var externalSwfLoader:Loader = new Loader();
public var swfDisplayObject:DisplayObject;
public var swfComObject:Object;
public function LoadSwf(url:String,p:Sprite):void
{
// externalSwfLoader.mouseChildren = false;
// this.mouseChildren = false;
// p.mouseChildren = false;
// externalSwfLoader.mouseEnabled = false;
// this.mouseEnabled = false;
// p.mouseEnabled = false;
p.addChild(this);
externalSwfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, createSwfObjects);
externalSwfLoader.load(new URLRequest(url));
}
public function createSwfObjects(evt:Event):void
{
var loaderInfo:LoaderInfo = evt.target as LoaderInfo;
swfDisplayObject = evt.target.content;
swfComObject = loaderInfo.content;
addChild(swfDisplayObject);
}
}
这是如何使用该类的 OpenLaszlo 代码:
<class name="YFilesSWF" extends="window">
<passthrough>
import LoadSwf;
</passthrough>
<attribute name="loadSwf" />
<handler name="oninit"><![CDATA[
this.loadSwf = new LoadSwf("SimpleGraphEditor.swf", this.content.sprite);
]]></handler>
</class>
有谁知道 OpenLaszlo 在哪里破坏了一些 Flex 鼠标事件以及如何防止它?有没有比 window 更好的组件来保存 Flex 鼠标事件?在 OL 组件源代码中需要修改什么?
谢谢!