есть ли такая вещь, как интерфейс MXML - PullRequest
4 голосов
/ 06 июля 2010

Это потенциально может быть глупым вопросом, поэтому заранее прошу прощения. Мне интересно, есть ли эквивалент MX-интерфейса в MXML?

Каждый раз, когда я чувствую необходимость использовать интерфейс, я всегда заканчиваю тем, что создаю скрипт действий, а не файл MXML, потому что я не знаю, можете ли вы / как это сделать.

Например, я собирался создать компонент, основанный на vbox. У меня есть 4 разных реализации одной и той же вещи, поэтому я решил использовать интерфейс. Но вместо создания единого интерфейса MXML и его реализации я создал интерфейс в as3. Я реализовал этот интерфейс в 4 разных классах.

Затем я создал 4 разных контейнера vbox, каждый с одной из реализаций в теге script.

Похоже ли это на разумный подход или я иду против зерна здесь?

РЕДАКТИРОВАТЬ - добавление примеров

Интерфейс

package components.content.contents
{
    public interface IContent
    {
        function init():void;
        function doSearch():void
        function setSearchTerm(term:String):void
    }
}

Реализация (1 из 4)

package components.content.contents
{
    public class ClipContent extends AbstractContent implements IContent
    {
        public function ClipContent()
        {
        }

        public function init():void
        {
        }

        public function doSearch():void
        {
        }

        public function setSearchTerm(term:String):void
        {
        }

    }
}

Файл MXML (1 из 4)

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
        <mx:Script>
            <![CDATA[
                              // ClipContent Container
                import components.content.contents.ClipContent;
                public var content:ClipContent= new ClipContent()

                public function dostuff():void

                {
                  content.init()
                  content.doSearch()

                }
            ]]>
        </mx:Script>

</mx:VBox>

Ответы [ 5 ]

13 голосов
/ 06 июля 2010

Вы можете использовать интерфейсы с компонентами MXML следующим образом:

// YourClass.mxml
<mx:HBox implements="IYourInterface">

является эквивалентом MXML

// YourClass.as
class YourClass extends HBox implements IYourInterface

Но вам все равно нужно создать интерфейс (в этом примере IYourInterface)в Actionscript.

5 голосов
/ 06 июля 2010

MXML может реализовать интерфейс, как сказал Роберт Бак, но он не может определить интерфейс.

0 голосов
/ 06 июля 2010

Во-первых, я согласен с Уэйдом, что Кодекс может помочь вам.

Во-вторых, я думаю, вам нужен интерфейс в вашем случае. В вашем вопросе вы хотите «4 разных реализации одного и того же». Как насчет использования "состояния" в mxml. Это может решить ваши проблемы.

0 голосов
/ 06 июля 2010

Вы правы, нет способа реализовать настоящий интерфейс с использованием MXML (правка: я исправлен, вы можете использовать ключевое слово "Implements", как описано в других ответах.) Другой подход, который следует рассмотреть, - это использовать "файл codeScript для каждого из ваших четырех файлов MXML:

файл MXML (MyFancyVBox.mxml):

<?xml version="1.0" encoding="utf-8"?>
<MyFancyVBoxCode>
...
</MyFancyVBoxCode>

файл AS (MyFancyVBoxCode.as):

package com.something.whatever
{
    import com.something.another.IFancyInterface;

    public class MyFancyVBoxCode implements IFancyInterface
    {
        ...
    }
}

Недостатком является то, что он удваивает количество исходных файлов.

0 голосов
/ 06 июля 2010

Нет!MXML является декларативным языком для верстки и позиционирования.По определению это требует реализации.Интерфейсы - это определение API без реализации.

Похоже, вы делаете все так, как я.Для компонента MXML вполне приемлемо реализовать интерфейс.И вполне допустимо, чтобы несколько компонентов реализовывали один и тот же интерфейс для достижения разных результатов.


Для полноты картины компонент MXML может реализовывать интерфейс точно так же, как компонент ActionScript:

<mx:myComp implements="com.myClass.Interface">
...