是否有MXML界面这样的东西

时间:2010-07-06 15:07:31

标签: flex interface mxml

这可能是一个愚蠢的问题,如果是这样,请提前道歉。 我想知道MXML中的接口是否相等?

每当我觉得需要使用界面时,我总是最终制作动作而不是MXML文件,因为我不知道你是否/如何做。

例如,我将有一个基于vbox的组件。我有4个不同的同一个实现,所以我决定使用一个接口。但是,我没有创建单个MXML接口并实现它,而是在as3中创建了一个接口。我已经在4个不同的类中实现了这个接口。

然后,我创建了4个不同的vbox容器,每个容器都有一个脚本标记中的不同实现。

这听起来像是一种合理的做法,还是我会反对这种情况?

编辑 - 添加示例

界面

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 个答案:

答案 0 :(得分:13)

您可以这样使用MXML组件的接口:

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

是MXML的等价物

// YourClass.as
class YourClass extends HBox implements IYourInterface

但是你仍然需要在Actionscript中创建接口(在本例中为IYourInterface)。

答案 1 :(得分:5)

MXML可以实现接口,就像Robert Bak所说,但它不能定义接口。

答案 2 :(得分:0)

没有! MXML是一种用于布局和定位的声明性语言。根据定义,它需要一个实现。接口是没有实现的API的定义。

听起来你正在按照我的方式做事。 MXML组件实现接口是完全可以接受的。并且让多个组件实现相同的接口以实现不同的结果是完全可以接受的。


为了完整起见,MXML组件可以像ActionScript组件一样实现接口:

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

答案 3 :(得分:0)

你是对的,没有办法用MXML实现真正的界面(编辑:我更正了,你可以使用其他答案中描述的“implements”关键字。)另一种考虑的方法是使用“ “4个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
    {
        ...
    }
}

缺点是它会使源文件的数量增加一倍。

答案 4 :(得分:0)

首先,我同意韦德的观点,即背后的代码可以帮助你。

其次,我在想你是否需要接口。在你的问题中,你想要“同一件事的4种不同的实现”。如何在mxml中使用“state”。它可以解决你的问题。