【问题标题】:Flex custom component, best way to use itFlex 自定义组件,最佳使用方式
【发布时间】:2012-01-10 17:33:03
【问题描述】:

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

假设我有我的 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>

我希望在按钮(登录)上单击我得到 main.mxml 中的 publicStr/privateStr... 我错了吗?如何使用更多组件,就像它们都是同一个应用程序的一部分并使用相同的变量/方法?

【问题讨论】:

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


    【解决方案1】:

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

    那么,父母和孩子应该如何正确沟通呢?子组件应该公开父组件(或框架,如果您准备好使用依赖注入框架)可以仅使用子组件需要的数据填充的属性。

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

    所以,doLogin() 将包含类似

    dispatchEvent(new Event('doLogin'));
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-23
      • 2014-03-14
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      相关资源
      最近更新 更多