题
我的问题是有关最佳做法访问对象的儿童的父母。因此,让我们说的一类实例化的另一类,这一类实例是现在引用有一个对象。从那孩子的目的,什么是最好的方式,参考回母体对象?目前我所知道的几种方式,我经常使用,但是我不确定如果一)有一个更好的方式来做到这一点或B)他们是最好的实践
第一种方法是使用getDefinitionByName,这将不会实例,类,但允许访问的任何东西里面它是公开宣布。
_class:Class = getDefinitionByName("com.site.Class") as Class;
然后参考,可变基于其父母对儿童的层次结构。
例如,如果儿童是在试图参考一类的两个级别上从本身:
_class(parent.parent).function();
这似乎是工作很好,但你需要知道在哪一级的儿童是在水平相比的父母你都在试图访问。
我还可以得到以下声明,以追查出[对象类名]成闪的输出。
trace(Class);
我不是100%执行,行,我还没有想追寻它作为一种参考的对象之外的现象我。
另一种方法我已经看到使用的是简单地通过一个参考这类物体建立和只是抓住它有一个构造参数
var class:Class = new Class(this);
然后在类文件
public function Class(objectRef:Object) {
_parentRef = objectRef;
}
这一基准,也需要你后退一步使用儿童父母的层次结构。
我还可以进口该类,然后使用的直接参考文件路径的一种方法内的这一类,无论其父母或没有。
import com.site.Class;
com.site.Class.method();
当然有父子关系是无关紧要因为我访问的方法或财产直接通过进口类。
我只是觉得我失去了一些东西真的很明显在这里。我基本上在寻找确认的,如果这些都是正确的方式可以参考的父母,如果是这是最理想的,或者我在看别的东西吗?
解决方案
它的总体良好有类为它自己的实例,并减少紧密结合到别的东西(在这种情况下,其父).如果你不喜欢的东西的父母。或重写现有的()它不可能使用这类容器没有doSometing()方法。我认为这绝对是更好地通过任何类可能需要然后在类它没有做任何父母。父母等了。
这个如果你今后想要改变结构,这是非常容易只是通过一个新的基准;执行《儿童类没有改变。
第三个选择,你在这里也有很大不同,它访问的一类平静的方法(你没有类型的道路的时候访问这一方法),而不是一个实例的方法的第一两个。
其他提示
在一般情况下,如果你需要一个孩子与父母,你应该看看它这样做,通过广播活动。这一分离的儿童的父母,并且使得它可能有其他类工作的儿童。
我不会建议通过在一个参考父类成的孩子。
这是一个简单的例子(我已经测试/汇编这么可能有一些打字错误).
//Child.as
package
{
import flash.events.EventDispatcher;
import flash.events.Event;
public class Child extends EventDispatcher
{
public function doSomething():void
{
var e:Event = new Event(Event.COMPLETE);
dispatchEvent(e);
}
public function foo():void
{
trace("foo");
}
}
}
//Parent.as
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Parent extends Sprite
{
private var child:Child;
public function Parent():void
{
c = new Child();
c.addEventListener(Event.COMPLETE, onComplete);
c.foo();//traces foo
c.doSomething()
}
public function onComplete(e:Event):void
{
trace("Child broadcast Event.COMPLETE");
}
}
}
在大多数情况下,将派遣定义活动,并通过数据。
基本上:
父母具有参考儿童和通过方法呼吁。孩子没有参考父母,并进行通信(人)通过派遣事件。
希望这可以帮助...
迈克腔
mesh@adobe.com
我总是用的你的第二种方法,通过一个指父母对儿童和储存是指在一件可变的子类。我说,这似乎是最简单的方法对儿童进行通信回到父母。
我喜欢通过的父母作为一个接口(此类可以被包含在任何父母执行这一接口)或实现的基准作为一个活动/职能的指针/委托其父母能挂钩。
我喜欢设立一个全球性的类来处理引用的类需要访问的任何其他类别,不一定是儿童。
全球一级根本组成的静电吸气,并制定者像这样:
private static const class:Class;
public static function setClass(_class:Class){
class = _class;
}
public static function getClass(void):Class{
return class;
}
的好事情是你不需要进口该类从全球类,只是全球类本身。
类的需要被引用的增加本身对全球列表。其他很酷的事情是,你可以容易地派遣事件,从这个集中的位置。
大多数时候,如果一类的需要被引用的儿童类别或任何其他类,我做它通过一个接口。
如果这些对象是在DisplayList,然后你有一些更多的选择。如果我有一个ParentClass和ChildClass,在孩子类,你看起来能够访问的父母,如果你投的请求作ParentClass.例如
ParentClass(parent).parentFunction();
我知道肯定它的工作如果ParentClass的文件类。作为该文件的类总是的第一个项目的列表显示,这种工作:
ParentClass(stage.getChildAt(0)).parentFunction();
在我的情况下,他们都是相同的成员包,因此我甚至不需要进口任何东西。我没有测试过它在所有情况,但它的工作,当我需要它。
当然'父母'和'getChild...'仅仅工作,如果这些对象是在DisplayList,但这已经足够好对我来说。