Flex自定义组件,使用它的最佳方式

时间:2011-12-01 15:13:11

标签: actionscript-3 flex flex4.5 custom-component

我还没有完全理解自定义组件如何工作......

我们假设我有我的Main.mxml应用程序

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx"
       xmlns:local="*">
    <fx:Script>
        <![CDATA[
            private var privateStr:String = "Stringa Private";
            public  var publicStr:String = "Stringa Public";
        ]]>
    </fx:Script>
    <local:AddUser height="100" width="500"/>   
    <s:Label id="lblText" x="120" y="120" width="418" height="115" text="!!!"/>                                    
</s:WindowedApplication>

组件AddUser.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx"
    creationComplete="initialize_component()">  
    <fx:Script>
        <![CDATA[                                               
            public var btnName:String = "Login";
        private function initialize_component():void
        {
             login.label = btnName;              
            }
            private function doLogin():void
            {
             //some stuff here
            }

        ]]>
    </fx:Script>
    <s:TextInput id="txtuser" x="96" y="36"/>
    <s:TextInput id="txtpass" x="96" y="66"/>
    <s:Button id="login" x="96" y="96" width="128" click="doLogin()" />
</mx:VBox>

我想在Button(登录)上点击我得到main.mxml中的publicStr / privateStr ... 我搞错了吗?我如何使用更多的组件,因为它们都属于同一个应用程序并使用相同的变量/方法?

1 个答案:

答案 0 :(得分:2)

您似乎对封装的想法存在疑问。子组件不应该知道父组件,View组件不应该做真正的工作,只需要从Controller组件请求工作。在非常简单的项目中,您的顶级组件可以包含控制器逻辑,但是许多人更喜欢将它保持独立,即使在小型项目中也是如此。如何做到这一点超出了这个答案的范围。

那么,父母和孩子应该如何正确沟通?子组件应该公开父级(或者框架,如果您感觉准备使用依赖注入框架)只能填充子组件所需的数据的属性。

子组件通过生成事件从控制器请求工作。

因此,doLogin()会包含类似

的内容
dispatchEvent(new Event('doLogin'));

并且父组件将监听此事件。在其处理程序中,您将执行登录。您的登录很可能是异步的,因此您需要另一个处理程序来侦听登录数据。当登录数据返回时,您将根据返回值在登录视图上设置属性。