在Flex中创建自定义布局时,为什么“必须”覆盖updateDisplayList()和measure()?

时间:2013-10-03 20:32:12

标签: actionscript-3 flex layout flex-spark

在Flex中创建自定义布局时,通常会覆盖LayoutBase,在这种情况下,Internet上的文档和教程会说您“必须”覆盖函数updateDisplayList()measure()。 。 .Huh?

我认为AS3中没有一个构造在语法上要求覆盖一个函数,并且肯定没有一个在这里。甚至没有提出未处理的错误或任何东西的特殊逻辑。这完全没问题:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns="*" backgroundColor="#000000" showStatusBar="false" click="createImage()">
    <fx:Script>
        <![CDATA[
            import spark.components.Image;

            [Embed(source="AL.png")]
            private static const IMAGE:Class;

            private var iX:int = 0;
            private var iY:int = 0;

            private function createImage():void
            {
                var img:Image = new Image();
                img.source = IMAGE;
                img.width = 100;
                img.height = 100;

                img.x = iX
                img.y = iY;

                iX += 100;
                iY += 100;

                grp.addElement(img);
            }
        ]]>
    </fx:Script>
    <s:Group id="grp" width="400" height="400">
        <s:layout>
            <GridLayout/>
        </s:layout>
    </s:Group>
</s:WindowedApplication>

在我的GridLayout.as类中:

package
{
    import spark.layouts.supportClasses.LayoutBase;

    public class GridLayout extends LayoutBase
    {
    }
}

每次单击应用程序时,都会在(x,y)* n处生成新图像,其中n是先前生成的图像数。它工作得很好。我甚至添加了代码,以便右键单击将获取已存在的图像并在屏幕上移动它,这也很好。

所以我想我的问题是。 。为什么世界上他们说这是绝对必要的?他们的意思是什么?我可以理解文档和内容,说这两个函数是您想要集中自定义的地方或类似的东西,但在编程中,说函数覆盖是 required 是一些非常强大的语言;如果东西在你没有覆盖这些功能的情况下保持不错,为什么文档和独立教程都会这样说呢?谢谢!

2 个答案:

答案 0 :(得分:2)

  

为什么世界上他们说这是绝对必要的?

因为我不知道你正在读什么文件;很难说。文件可能是错的;或者你可能会脱离背景。您不需要在updateDisplayList()或measure()方法中编写任何类型的代码,但是......

  

他们是什么意思?

在创建Flex组件的上下文中;对MX componentsSpark Components使用Flex Component LifeCycle方法是有意义的。生命周期方法(createChildren(),commitProperties(),updateDisplayList()和measure()由Flex Framework执行,并使用内置于框架中的无效循环。

框架方法可以帮助您将“类似”代码放在同一个地方,这样您就无法在整个地方使用它。

Spark Framework通过提供将布局和大小调整代码(AKA updateDisplayList()和measure()分离出主类并进入特定布局类的选项来改变一些东西。

  

说需要一个函数重载是非常强大的   语言

如果您阅读任何说明需要overloading的文档,我会感到惊讶。重载是创建具有相同名称但不同参数的多个函数的行为。 ActionScript不支持此功能。 Overriding是扩展子组件中的函数以更改或扩展该函数的功能的行为。它们是不同的概念;我不清楚这是否是您的错误,或者您是否对某些面向对象编程的租户感到困惑。

这有帮助吗? [不幸的是,我现在没有时间尝试重新处理您的示例以正确使用Flex Framework约定。

答案 1 :(得分:2)

 Why in the world are they saying this is absolutely required?

我理解您的担忧,这些重要的功能是组件工作最佳所必需的。如果您的应用程序很小,这些组件不需要遵循这些组件生命周期原则,组件不会经常更改,也没有其他人接触您的类。

但是,如果您的应用需要经常更改这些组件,那么您可能会强制执行这些生命周期原则。

例如:你想准备可乐,步骤(我说生命周期)将取水&gt;混合糖&gt;添加颜色&gt;混合苏打&gt;瓶子

现在你得到了改变你刚刚准备好的可乐的颜色的命令,生命周期已经完成,如果你需要改变任何东西,你需要付出很多努力甚至改变颜色它。如果您遵循循环生活,它会使应用程序在运行时更轻松。没有性能问题。