代码之家  ›  专栏  ›  技术社区  ›  S.C.

模块化和flex视图状态

  •  2
  • S.C.  · 技术社区  · 15 年前

    我也看到过一些类似的问题,但没有什么能像我所想的那样,所以这里。我有一个flex应用程序,它有很多视图状态,其中一些是经常使用的,而另一些则不是。目前,所有这些状态都位于一个mxml文件中,因此只有一个swf文件生成并加载到客户端浏览器中。我想模块化这些视图状态,将它们分离到不同的源文件中,只需将状态从一个文件加载到另一个文件中,但是,我仍然希望用户只需加载一个swf文件。我这样做的主要原因是避免源文件超过10000行。有解决这个问题的标准方法吗?

    谢谢。

    1 回复  |  直到 15 年前
        1
  •  5
  •   Bernesto    15 年前

    有两种方法可以满足你的要求。第一个是听起来你在问什么,第二个是我推荐的。

    第一:

    创建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>