当我想通过使用时调用主应用程序时,我可以做到这一点;
Application.application.methodName();
但是如何从自定义组件调用方法?我的组件在我的组件包中,我尝试以下
components.customComponent.methodName()
然而它没有发生, 任何想法?
我的自定义组件的一个实例调用actionscript类,所以我不想在actionscript中再次实例化自定义类,我只想调用一个setter方法......
还有其他想法吗?
答案 0 :(得分:2)
您不必将方法设为静态;这样做可能会毫无用处,因为你希望方法调用对组件的当前状态做一些事情,我猜测 - 使用它的一些数据,改变它的外观等等。你真正需要的是一个对象引用
由于Application.application位于传说中的显示列表的顶部(或实际上非常接近顶部),因此您应该能够从该点开始访问每个组件,然后traversing the Display List - 直到最终,在到达您的嵌套组件时,调用其公开定义的方法。
然而,我必须(极其尊重!)说你冒险进入危险的OO水域。 :)正确的方法是找出将自定义组件的引用传递给需要访问它的ActionScript类的一些方法 - 例如,在你的MXML中:
<mx:Script>
<![CDATA[
private function this_creationComplete(event:Event):void
{
var yourObject:YourClass = new YourClass(yourCustomComponent);
}
]]>
</mx:Script>
<components:YourCustomComponent id="yourCustomComponent" />
...然后在你的ActionScript类中:
public class YourClass
{
private var componentReference:YourCustomComponent;
public function YourClass(component:YourCustomComponent)
{
this.componentReference = componentReference;
}
private function yourMethod():void
{
this.componentReference.someMethodDefinedInYourComponent();
}
}
这样的方法可能会更好地为您服务。是否有意义?我会留意我们的评论;回复后,我会尽力帮助你完成它。
答案 1 :(得分:0)
以这种方式引用组件需要该方法是静态的。
如果要在组件的实例上调用方法,请为其分配一个ID,并从您定义该组件的视图中调用它。
<!-- component declaration -->
<comps:MyComponent id="myComp"/>
// inside a script block
myComp.mySetter(someObj)
顺便说一句,ActionScript中的“setter方法”是使用以下语法定义的方法:
public function set myProperty(varName : String) : void { ... }
它可以被“调用:”就像你设置属性值一样:
myComp.mySetter = myObj;
在许多其他语言中,除了命名约定之外,“setter方法”与任何其他方法一样。值得理解的是,AS3中真正的setter方法是不同的。
答案 2 :(得分:0)
您需要确保引用该组件的实例,并尝试将其调用。所以在下面的例子中你可以看到我在类A的构造函数中创建了一个B的实例。所以现在我有一个B实例。现在我可以调用b.someMethod()
public class A
{
public function A()
{
var b : B = new B();
b.someMethod();
}
}
public class B
{
public function B()
{
}
public function someMethod() : void
{
}
}
您可以将A类视为Application.mxml,将类b视为自定义组件。因此,无论您何时尝试调用它,都需要确保已创建组件。