假设我有一个界面
public interface IFoo {
...
}
我有几个实施类
public class Foo implements IFoo {
...
}
...
public class Bar implements IFoo {
...
}
...
public class Baz implements IFoo {
...
}
我想在MXML中像这样引用IFoo
<ns:IFoo id="myfoo"/>
并让它在工厂运行时实例化。
然而,编译器不允许我这样做 - 它试图在生成的ActionScript中执行“new IFoo”。
如何解决这个问题?如何在MXML中纯粹使用界面和工厂?
答案 0 :(得分:0)
您可以使用组件根节点中的implements="IFoo"
属性在MXML组件中实现接口。
修改强>
抱歉,我误解了你的问题。我不知道在纯mxml中实现工厂的方法。我猜你必须使用Actionscript或mxml状态来实现类似的行为。
答案 1 :(得分:0)
结帐ClassFactory。这就是项目渲染器的实例化方式。
答案 2 :(得分:0)
声明MXML子实例实例化该类型的对象 - 您不能简单地在MXML中声明属性而不将实例与其关联。
鉴于此 - 没有办法实现相当于
public var myFoo:IFoo;
在您的MXML中。
正如James指出的那样,你可以使用ClassFactory来实现以下目标:
<mx:ClassFactory class="{Foo}" id="fooFactory" />
但您需要致电fooFactory.newInstance()
以获取IFoo
。