Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex/AS3元数据标记在接口定义中的处理方式是否与在类定义中的处理方式不同?_Apache Flex_Actionscript 3 - Fatal编程技术网

Apache flex Flex/AS3元数据标记在接口定义中的处理方式是否与在类定义中的处理方式不同?

Apache flex Flex/AS3元数据标记在接口定义中的处理方式是否与在类定义中的处理方式不同?,apache-flex,actionscript-3,Apache Flex,Actionscript 3,如果在接口前面使用元数据标记,这与在类前面相同吗?我能做什么 [Event(name="fooUpdate", type="com.acme.events.FooEvent") public interface IFoozer extends IEventDispatcher { } // ... now omit that metadata in the implementations ... public class Foozer extends EventDispatcher impl

如果在接口前面使用元数据标记,这与在类前面相同吗?我能做什么

[Event(name="fooUpdate", type="com.acme.events.FooEvent")
public interface IFoozer extends IEventDispatcher
{
}

// ... now omit that metadata in the implementations ...

public class Foozer extends EventDispatcher implements IFoozer
{
    public function set bar(b:Bar):void
    {
        this.dispatchEvent(new FooEvent(FooEvent.FOO_UPDATE));
    }
}

// ... and expect it to be known in MXML ...

<acme:Foozer fooUpdate="myUpdateHandler">
  <!-- ... -->
</acme:Foozer>
[事件(name=“foodupdate”,type=“com.acme.events.FooEvent”)
公共接口IFoozer扩展IEventDispatcher
{
}
//…现在在实现中省略该元数据。。。
公共类Foozer扩展EventDispatcher实现IFoozer
{
公共功能设置栏(b:栏):无效
{
this.dispatchEvent(新的FooEvent(FooEvent.FOO_UPDATE));
}
}
//…并希望它在MXML中为人所知。。。

或者,类似地,使用
[Bindable]

是和否…对于
[Event]
是…但是
[Bindable]
不仅仅是一个元数据标记…
[Bindable]
(无参数!!)指示编译器生成AS3代码,这将确保在设置属性时调度
PropertyChangeEvent
(您可以看到,如果让mxmlc保持生成为3代码)

另外,对于
[Embed]
,情况并非如此(
[Embed]
后面必须跟一个变量。接口不能有变量)…您将始终能够通过
flash.utils::describeType
…检索元数据。这是非常不一致的,因为某些元数据标记实际上只提供编译到输出中的元数据,而某些元数据指示编译器真正采取行动…再次,某些标记提供的元数据被flex framework,它们成为MXML中的一种语言功能(如
[Event]
)…但它们不在AS3中…然而AS3非常接近于虚拟机上发生的事情,而MXML和Flex framework两者都只是模糊地与之相关…这也是为什么ActionScript类和MXML组件的互操作非常糟糕的原因(您可能已经注意到MXML没有接口、执行流(以及时间)的概念,而AS3没有事件或绑定的概念(它们是“本机的”)在MXML中,但是构建在AS3之上,使用了一些元数据和
flash.events
包,在MXML中看起来很不错,但是在AS3中调用和实例化的数量惊人)

你想要的,可能不起作用…我个人认为,接口允许有元数据更大的缺陷…几乎所有元数据都是在运行时使用的…在运行时,每个对象都有自己的类,接口是内省/反射的次要对象

所以回到老派短语:接口需要行为,类提供实现
[Event(name=“foodupdate”,type=“com.acme.events.FooEvent”)]
是纯元数据……元数据是AS3世界中的实现,因为这不需要任何人做任何事情(您不妨编写
[Bar(foo=“123”)]
)…它是一个放在类顶部的标记,当且仅当类在其实现中的某个地方有这样一行时:
this.dispatchEvent(new FooEvent(FooEvent.foo\u UPDATE))
…您想说的是,任何
IFoozer
实现都将调度
FooEvent.FOO\u UPDATE
…这是编译器无法提供的保证,因为它不会检查元数据和实现


希望这有助于…

您可以在接口中定义
[Event]
元数据以供参考,但与函数不同,您不能强制实现使用这些事件。根据我的经验,您必须在实现类中重新定义事件