比较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;
}
    

要回复问题请先登录注册