2010-09-16 114 views
1

有没有什么办法让界面和自定义命名空间一起玩?示例如下。ActionScript自定义命名空间界面

IHeaderRenderer.as:

public interface IHeaderRenderer{ 
function set header(value:IHeader):void; 
function get header():IHeader; 
} 

HeaderRenderer.as

import fi.test.internalNamespace; 
public class HeaderRenderer implements IHeaderRenderer{ 
    internalNamespace function set header(value:IHeader):void{ 
     // do something 
    } 

    internalNamespace function get header():IHeader{ 
     // do something 
    } 
} 

这给你基本的编译器错误:

1044:接口的方法获得标题命名空间fi.gridutils。 headerrenderers:IHeaderRenderer没有通过类fi.gridutils.headerrenderers.implementation:HeaderRenderer实现。

为什么需要这个,你可能会问。我正在开发一个组件,其中头部访问器不应该直接对组件最终用户(开发人员)可见,但是如果开发人员想要创建他自己的渲染器,他应该知道它们是需要的。这是因为父组件将使用这些访问器为自定义渲染器提供正确呈现标题所需的数据。

我们脑子里面似乎只有三种选择:

1)使用公共访问控制。这有一个终端开发者会看到访问者的挫折,他不应该直接访问它。另外,它们增加了不必要的混乱,因为它们出现在自动完成中。

2)不要使用接口。这意味着最终用户有进一步开发组件的相当差的选项。

3)使用接口,但省略使用internalNamespace的访问器。现在,最终开发人员不会知道他应该将头部访问器也添加到他的自定义headerrenderer类中,最终在Flash Player中给运行时开发人员提供以下错误:

无法在fi上创建property internalNamespace/:: header .gridutils.headerrenderers.implementation.HeaderRenderer。

对不起所有的blabbing。任何狡猾的想法如何处理这种情况?

回答

2

在ActionScript中,接口方法需要是公共的。接口有什么好处,如果你不能保证使用它的组件可以访问相关的接口方法?

表示,您可以使用排除元数据来防止在代码提示中显示属性。

事情是这样的:

[Exclude(name="header", kind="property")] 

More info