【问题标题】:Downgrading Flex components - Best practice降级 Flex 组件 - 最佳实践
【发布时间】:2011-03-11 09:21:49
【问题描述】:

我经常在使用 Flex 时遇到同样的问题:当我为 spark 组件创建皮肤或基于另一个 spark 组件创建新的 spark 组件时,我继承了我不需要的属性。例如,当我为 spark.components.Panel 创建自定义外观时,我不需要 RectangularDropShadow。目前为了摆脱它,我将它从 MXML 代码中删除,并在 AS 中创建一个与已删除组件 ID 中命名的类型相同的公共变量。我这样做是为了满足 OOP 的 Liskov 原则并且它可以工作 (http://en.wikipedia.org/wiki/Liskov_substitution_principle) 但我有未使用的属性/变量,这不好。我认为这不是最好的方法。

当然还有另一种方法:例如,为了创建没有不需要的继承特性 spark.components.Panel 的自定义面板,我必须创建自己的自定义面板,该面板继承自 spark.components.Panel 的超类。这种方法意味着一些额外的工作,但这是直接的 OOP 方法。

但也许还有其他我还不知道的 Flex 特定技术?

我想知道 Flex-guru 是如何处理这个问题的。欢迎您提出所有想法和建议!

【问题讨论】:

    标签: apache-flex actionscript-3 oop


    【解决方案1】:

    我不确定这是否是您要查找的内容,但您可以使用 Exclude metadata 告诉代码提示忽略样式或属性。

    在 Flex 框架中找到排除属性然后覆盖 getter 和 setter 以不执行任何操作的代码并不少见。这在元数据中:

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

    这是代码:

    override public get function label():String{return null}
    override public set function label(value:String):void { }
    

    您可以使用以下方法删除样式:

    [Exclude(name="RectangularDropShadow", kind="style")] 
    

    当然,这只会影响代码提示。实现样式的代码很可能仍在您的组件中。

    您所说的只是继承的性质。为什么从代码中删除这些样式/属性对您很重要?

    【讨论】:

    • 我只是想发布相同的答案(我昨天来的)。如果我像您显示的那样覆盖功能-那么就不需要未使用的属性。谢谢!
    【解决方案2】:

    如果这是专门针对 Flex 组件蒙皮的,您可以轻松地不使用 RectangularDropShadow 类,而是扩展 ProgrammaticSkin 或您自己的实现 IProgrammaticSkins 方法的 ProgrammaticSkin 类。

    引用:

    当然还有另一种方法: 为了创建自定义面板 没有不需要的继承特性 spark.components.Panel 我必须 创建我自己的继承的自定义面板 来自超类 以 spark.components.Panel 为例。

    至于这个,我觉得你是太担心了。当然,做任何让您最舒服的事情,但 Flex 的架构设计限制之一是允许开发人员快速开发 RIA,而不必担心诸如内存管理之类的烦人的小事情。但是,感谢您担心不需要的功能和浪费资源,但我认为没有必要,因为每次您需要稍微不同的功能集时都创建自己的 Panel 类是浪费时间。但是,嘿,就像我妈常说的,“空闲内存就是浪费内存!”

    【讨论】:

      猜你喜欢
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 2011-04-03
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多