создать интерфейсный объект в mxml - PullRequest
1 голос
/ 08 сентября 2010

Допустим, у меня есть интерфейс

public interface IFoo {
   ...
}

и у меня есть несколько реализующих классов

public class Foo implements IFoo {
    ...
}

...

public class Bar implements IFoo {
    ...
}

...

public class Baz implements IFoo {
    ...
}

Я хочу сослаться на IFoo в MXML следующим образом

<ns:IFoo id="myfoo"/>

и запускать его на фабрике во время выполнения.

Тем не менее, компилятор не позволит мне сделать это - он пытается сделать «новый IFoo» в сгенерированном ActionScript.

Как обойти это? Как я могу использовать интерфейс и фабрику исключительно в MXML?

Ответы [ 3 ]

0 голосов
/ 08 сентября 2010

Выезд ClassFactory .Это то, как создаются такие вещи, как средства визуализации элементов.

0 голосов
/ 08 сентября 2010

Объявление дочернего элемента MXML создает объект этого типа - вы не можете просто объявить свойство в MXML, не связав экземпляр с ним.

Учитывая это - нет способа достичь эквивалента

public var myFoo:IFoo;

в вашем MXML.

Как указал Джеймс, вы можете использовать ClassFactory для получения следующего:

<mx:ClassFactory class="{Foo}" id="fooFactory" />

, но вам потребуется позвонить fooFactory.newInstance() чтобы получить IFoo.

0 голосов
/ 08 сентября 2010

Вы можете реализовать интерфейсы в компонентах MXML с атрибутом implements="IFoo" в корневом узле компонента.

Edit:

Извините, я неправильно понял ваш вопрос. Я не знаю способ реализовать фабрику в чистом mxml. Я полагаю, вы должны использовать Actionscript или mxml состояния для достижения аналогичного поведения.

...