在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 是一些非常强大的语言;如果东西在你没有覆盖这些功能的情况下保持不错,为什么文档和独立教程都会这样说呢?谢谢!
答案 0 :(得分:2)
为什么世界上他们说这是绝对必要的?
因为我不知道你正在读什么文件;很难说。文件可能是错的;或者你可能会脱离背景。您不需要在updateDisplayList()或measure()方法中编写任何类型的代码,但是......
他们是什么意思?
在创建Flex组件的上下文中;对MX components或Spark 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;瓶子
现在你得到了改变你刚刚准备好的可乐的颜色的命令,生命周期已经完成,如果你需要改变任何东西,你需要付出很多努力甚至改变颜色它。如果您遵循循环生活,它会使应用程序在运行时更轻松。没有性能问题。