1

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

我不认为 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 是先前生成的图像数。它工作得很好。我什至添加了代码,以便右键单击将获取已经存在的图像并在屏幕上移动它,并且效果也很好。

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

4

2 回答 2

2

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

因为我不知道您正在阅读什么文档;很难说。文档可能有误;或者你可能会断章取义。不需要在 updateDisplayList() 或 measure() 方法中编写任何类型的代码,但是...

他们的意思是什么?

在创建 Flex 组件的上下文中;对于MX 组件Spark 组件,使用 Flex 组件生命周期方法是有意义的。生命周期方法(createChildren()、commitProperties()、updateDisplayList() 和 measure() 由 Flex 框架执行,并利用框架中内置的失效周期。

框架方法可帮助您将“相似”代码放在同一个地方,这样您就不会到处都是。

Spark 框架通过提供将布局和大小调整代码(AKA updateDisplayList() 和 measure() 从主类分离到特定布局类中的选项来改变一些事情。

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

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

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

于 2013-10-03T20:53:04.770 回答
2
 Why in the world are they saying this is absolutely required?

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

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

例如:您要准备可乐,步骤(我会说生命周期)将是取水>混合糖>添加颜色>混合苏打水>装瓶

现在接到订单,给刚准备好的可乐改色,生命周期已经结束,如果此时需要改什么,连改颜色都得费一番功夫。如果您遵循生命周期,它会使应用程序在运行时更轻松。没有性能问题。

于 2013-10-03T21:03:09.207 回答