模块化和弹性视图状态

时间:2010-11-24 19:35:55

标签: flex modularity states

我看过一些类似的问题,但没有什么比我想弄清楚的更多,所以这里有。我有一个具有许多视图状态的灵活应用程序,其中一些经常使用,其中一些不是。目前,所有这些状态都驻留在一个mxml文件中,因此在客户端浏览器中只生成并加载了一个swf文件。我想通过将它们分成不同的源文件并将状态从一个文件加载到另一个文件来模块化这些视图状态,但是,我仍然希望用户只需要加载一个swf文件。我的主要原因是避免源文件超过10,000行。有没有解决这个问题的标准方法?

感谢。

1 个答案:

答案 0 :(得分:5)

有两种方法可以满足您的要求。第一个是你想要的,第二个是我推荐的。

首先:

创建main.mxml应用程序,然后为每个状态创建单独的component1.mxml和component2.mxml文件。然后在你的应用程序中设置如下:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:local="*">
    <s:states>
        <s:State name="State1"/>
        <s:State name="State2"/>
    </s:states>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <local:Component1 includeIn="State1"/>
    <local:Component2 includeIn="State2"/>
</s:Application>

第二种方式,由于您对应用程序的描述,我推荐使用的方法将其分解为具有一个swf应用程序的多个swf模块。这样,用户只下载他们计划使用的内容。在这种情况下,请执行与以前相同的操作,但创建模块而不是组件。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:local="*">
    <s:states>
        <s:State name="State1"/>
        <s:State name="State2"/>
    </s:states>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <mx:ModuleLoader url="Component1.swf" includeIn="State1"/>
    <mx:ModuleLoader url="Component2.swf" includeIn="State2"/>
</s:Application>