Apache flex 从actionscript调用自定义组件中的mxml setter方法
我试图从actionscript类中调用自定义组件的actionscript块中的setter方法 当它是我想通过使用调用的主要应用程序时,我可以很好地做到这一点Apache flex 从actionscript调用自定义组件中的mxml setter方法,apache-flex,actionscript-3,Apache Flex,Actionscript 3,我试图从actionscript类中调用自定义组件的actionscript块中的setter方法 当它是我想通过使用调用的主要应用程序时,我可以很好地做到这一点 Application.application.methodName(); 但是,如何从自定义组件调用方法?我的组件在我的组件包中,我正在尝试以下操作 components.customComponent.methodName() 但是它没有发生,, 有什么想法吗 我的自定义组件的一个实例调用actionscript类,所以我不
Application.application.methodName();
但是,如何从自定义组件调用方法?我的组件在我的组件包中,我正在尝试以下操作
components.customComponent.methodName()
但是它没有发生,,
有什么想法吗
我的自定义组件的一个实例调用actionscript类,所以我不想在actionscript中再次实例化自定义类,我只想调用一个setter方法
还有其他想法吗?以这种方式引用组件要求方法是静态的 如果要在组件实例上调用方法,请为其分配一个ID,并从定义该组件的视图中调用该方法
<!-- component declaration -->
<comps:MyComponent id="myComp"/>
// inside a script block
myComp.mySetter(someObj)
它可以“调用:”就像设置属性值一样:
myComp.mySetter = myObj;
在许多其他语言中,“setter方法”与任何其他方法一样,只是命名约定不同。值得理解的是,AS3中的真正setter方法是不同的。您需要确保您有一个对该组件实例的引用,您正试图从中调用该组件。在下面的例子中,你可以看到我在类A的构造函数中创建了一个B的实例。现在我有了一个B的实例。现在我可以从这个实例调用B.someMethod()
您可以将类A视为您的Application.mxml,将类b视为您的自定义组件。因此,无论您在何处尝试调用它,都需要确保您的组件已创建。您不必将该方法设置为静态;这样做可能是无用的,因为我猜,您希望方法调用对组件的当前状态进行处理——使用它的一些数据,更改它的外观,等等。您真正需要的是一个对象引用 由于Application.Application位于虚构显示列表的顶部(或实际上非常接近顶部),因此您应该能够从该点开始访问每个组件,然后——直到最终到达嵌套组件时,调用其公开定义的方法 然而,我必须说(怀着最大的敬意!)你正在冒险进入危险的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" />
这样的方法可能会更好地为您服务。这有意义吗?我会留意我们的评论;回帖,我会尽力帮你度过难关
public class A
{
public function A()
{
var b : B = new B();
b.someMethod();
}
}
public class B
{
public function B()
{
}
public function someMethod() : void
{
}
}
<mx:Script>
<![CDATA[
private function this_creationComplete(event:Event):void
{
var yourObject:YourClass = new YourClass(yourCustomComponent);
}
]]>
</mx:Script>
<components:YourCustomComponent id="yourCustomComponent" />
public class YourClass
{
private var componentReference:YourCustomComponent;
public function YourClass(component:YourCustomComponent)
{
this.componentReference = componentReference;
}
private function yourMethod():void
{
this.componentReference.someMethodDefinedInYourComponent();
}
}