2

是否可以将 MXML 作为参数(XML 参数)从外部应用程序传递并动态加载到 Flash Player 中以创建页面。例如

将 xml = <mx:canvas><mx:label text="hello" /></mx:canvas> 传递给 Flex 和 flex 应该创建带有标签控件的画布。有没有相关的例子。

谢谢

4

4 回答 4

3

需要先将 MXML 代码编译为 ActionScript,然后 Flash Player 才能对其执行任何操作。Flash Player 在运行时不解释 MXML。

于 2009-03-03T03:12:09.473 回答
1

你想做的事情是不可能的。就像 brd6644 所说,mxml 被编译成 swf 中的字节码,由 flash 播放器解释。Flash 播放器不理解 mxml(甚至是 actionscript)。

话虽如此,有一个可用于动态 MXML 的 JSP 库。看这里:

http://www.adobe.com/devnet/flex/articles/server_perf_05.html

该链接很旧,现在我似乎找不到更新的链接,但我知道该项目仍然存在。我相信它实际上仍然是 ColdFusion 的一部分。它允许您创建动态 mxml,该 mxml 会根据请求编译 JIT。它当然会因此而对性能产生重大影响,但如果您需要动态 MXML,它是一种选择。

当我找到它时,我会用更好的链接更新这个评论。

于 2009-03-03T13:59:58.697 回答
1

只需将组件的属性存储到 XML 并放置一个 className 属性,这样如果您加载 XML,您就可以使用一个函数将 XML 的属性设置为您创建的组件的属性,这将在您的 className 属性中确定

于 2010-06-25T03:22:36.930 回答
0

我最初的猜测是否定的,它仍然是“XML”类型,并且 Actionscript 3 中没有“eval”。我快速搜索了一下,我不得不说不,这是不可能的。

然而,我在我创建的应用程序中做了类似的事情。

我所做的是将对象类型和一些属性(x、y、宽度、高度等)存储在数据库中。此数据从远程对象调用返回,然后在运行时创建这些对象,这可以获得您想要实现的类似效果。

例如:

var resultAC:ArrayCollection = event.result as ArrayCollection;
var tmpCanvas:Canvas;

    for(var i:int = 0; i < resultAC.length; i++)
    {
      if(resultAC.getItemAt(i).type == "Canvas")
      {
         tmpCanvas = new Canvas();
         tmpCanvas.x = resultAC.getItemAt(i).x;
         tmpCanvas.y = resultAC.getItemAt(i).y;
         ...
         parent.addChild(tmpCanvas);
      }
    }
于 2009-03-03T03:00:24.383 回答