微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

比较ClassFactory.generator属性来自mxml与其原始Class

如何解决比较ClassFactory.generator属性来自mxml与其原始Class

|| 我有一些在MXML标记中声明的组件,以及一些属性和事件处理程序。 对于其中一些,有必要重新实例化,因此我想出了以下架构。 某些组件将在某些时候重新实例化:
<flint:forms>
    <fx:Component>
        <login:LoginForm loginClick=\"outerDocument.form_loginClick()\" />
    </fx:Component>
    <fx:Component>
        <config:CustomizerWizard close=\"outerDocument.init()\" />
    </fx:Component>
</flint:forms>
在控制器中需要新的\“ LoginForm \\”的某个时刻:
public var form:LoginForm;
...
form = ReDo(LoginForm);
ReDo函数应如下所示:
public function ReDo(classe:Class):* {

    for each (var factory:ClassFactory in forms) {
        if (factory.generator == classe) return factory.newInstance();
    }
}
但这并没有按我希望的那样工作。 Flex编译器为每个标签创建的类与其在其中声明的实际类不兼容。 我尝试创建自己的标签,但是编译器不允许我以相同的方式使用它。 (抱怨它不是容器) 有没有一种方法可以将自定义ClassFactory类与可以在ReDo函数中使用的属性一起使用?像这样:
<flint:forms>
    <flint:MyComponent type=\"loginForm\">
        <login:LoginForm loginClick=\"outerDocument.form_loginClick()\" />
    </flint:Component>
    <flint:MyComponent type=\"wizard\">
        <config:CustomizerWizard close=\"outerDocument.init()\" />
    </flint:Component>
</flint:forms>
还是代替自定义ClassFactory,尝试将ClassFactory.generator属性强制转换/转换为可以预期的值,而不是它现在已经具有的某些随机类名? 编辑 无需比较两个Class变量(我认为这是最好的方法),我可以实例化列表中的每个组件,并比较所需的类型。
public function ReDo(classe:Class):* {

    for each (var factory:ClassFactory in forms) {
        var obj:* = factory.newInstance();
        if (obj is classe) return obj;
        //if (factory.generator == classe) return factory.newInstance();
    }
}
那将是我代码中的唯一更改,但这不是浪费吗? GC是否足够聪明以清除所有不通过“ if”的obj?     

解决方法

        如果使事件杂乱无章,并将处理程序移到更高的级别:
addEventListener(LoginEvent.LOGIN_CLICK,...);
addEventListener(WizardEvent.CLOSE,...);
那么您可以基本上写:
<flint:forms>
    <login:LoginForm id=\"loginForm\" />
    <config:CustomizerWizard id=\"wizard\" />
</flint:forms>
接着:
public function ReDo(classe:Class):* {
    return new classe();
}
另一种(也是更正确的)方法是为每个组件使用单独的工厂函数:
public function createLoginForm():LoginForm {
    var loginForm:LoginForm = new LoginForm();
    loginForm.addEventListener(LoginEvent.LOGIN_CLICK,...);
    return loginForm;
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。