代码之家  ›  专栏  ›  技术社区  ›  davr

是否可以在不使用MXML的情况下使用Flex框架/组件?

  •  19
  • davr  · 技术社区  · 18 年前

    如果不可能,有人能提供一个最小的MXML文件来引导一个自定义AS类,然后该类就可以访问FlexSDK了吗?

    4 回复  |  直到 18 年前
        1
  •  13
  •   davr    16 年前

    我做了一个类似于Borek的简单引导(见下文)。我很想摆脱mxml文件,但如果我没有它,我就没有Flex附带的任何标准主题(haloclassic.swc等)。有人知道如何按照西奥的建议去做,并且仍然使用标准主题吗?

    以下是我的简化引导方法:

    <?xml version="1.0" encoding="utf-8"?>
    <custom:ApplicationClass xmlns:custom="components.*"/>
    

    ApplicationClass.as

    package components {
        import mx.core.Application;
        import mx.events.FlexEvent;
        import flash.events.MouseEvent;
        import mx.controls.Alert;
        import mx.controls.Button;
    
        public class ApplicationClass extends Application {
            public function ApplicationClass () {
                addEventListener (FlexEvent.CREATION_COMPLETE, handleComplete);
            }
            private function handleComplete( event : FlexEvent ) : void {
                var button : Button = new Button();
                button.label = "My favorite button";
                button.styleName="halo"
                button.addEventListener(MouseEvent.CLICK, handleClick);
                addChild( button );
            }
            private function handleClick(e:MouseEvent):void {
                Alert.show("You clicked on the button!", "Clickity");
            }
        }
    }
    

    以下是将其与Flex 4一起使用所需的更新:

    主程序文件

    <?xml version="1.0" encoding="utf-8"?>
    <local:MyApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:local="components.*" />
    

    package components {
        import flash.events.MouseEvent;
        import mx.controls.Alert;
        import mx.events.FlexEvent;
        import spark.components.Application;
        import spark.components.Button;
    
        public class MyApplication extends Application {
            public function MyApplication() {
                  addEventListener(FlexEvent.CREATION_COMPLETE, creationHandler);
            }
            private function creationHandler(e:FlexEvent):void {
                var button : Button = new Button();
                button.label = "My favorite button";
                button.styleName="halo"
                button.addEventListener(MouseEvent.CLICK, handleClick);
                addElement( button );
            }
            private function handleClick(e:MouseEvent):void {
                Alert.show("You clicked it!", "Clickity!");
            }
        }
    }
    
        2
  •  9
  •   Borek Bernard    18 年前

    这是一个非常简单的应用程序,只在MXML中执行基本的引导。这是MXML:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()">
      <mx:Script source="Script.as" />
    </mx:Application>
    

    这是脚本。如下所示:

    import mx.controls.Button;
    import flash.events.MouseEvent;
    import mx.controls.Alert;
    import mx.core.Application;
    
    private function onCreationComplete() : void {
      var button : Button = new Button();
      button.label = "Click me";
      button.addEventListener(MouseEvent.CLICK, function(e : MouseEvent) : void {
        Alert.show("Clicked");
      });
    
      Application.application.addChild(button);
    }
    
        3
  •  7
  •   davr    16 年前

    注意:除非您首先初始化Flex库,否则下面的答案实际上不会起作用。这涉及到很多代码。有关更多详细信息,请参阅下面的评论或其他答案。


    主类甚至不必在MXML中,只需创建一个继承自 mx.core.Application (这是MXML类与 <mx:Application> 根节点编译为:

    package {
    
      import mx.core.Application;
    
    
      public class MyFancyApplication extends Application {
    
        // do whatever you want here
    
      }
    
    }
    

    此外,任何使用 mxmlc 编译器——甚至Flash CS3创作工具——可以使用Flex类,只需在类路径中提供它们(使用时参考框架SWC) 或使用时指向包含源的文件夹)。除非文档类继承自 mx.core.Application

        4
  •  0
  •   Antti    18 年前

    是的,您只需要在类路径中包含flex swc。您可以在frameowworks/lib/flex.swc中的flex sdk中找到flex.swc