Apache flex 从actionscript调用自定义组件中的mxml setter方法

Apache flex 从actionscript调用自定义组件中的mxml setter方法,apache-flex,actionscript-3,Apache Flex,Actionscript 3,我试图从actionscript类中调用自定义组件的actionscript块中的setter方法 当它是我想通过使用调用的主要应用程序时,我可以很好地做到这一点 Application.application.methodName(); 但是,如何从自定义组件调用方法?我的组件在我的组件包中,我正在尝试以下操作 components.customComponent.methodName() 但是它没有发生,, 有什么想法吗 我的自定义组件的一个实例调用actionscript类,所以我不

我试图从actionscript类中调用自定义组件的actionscript块中的setter方法

当它是我想通过使用调用的主要应用程序时,我可以很好地做到这一点

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();
    }
}