2009-02-04 40 views
1

即时尝试从动作脚本类的一些动作脚本块中调用自定义组件的动作块。从动作脚本调用自定义组件中的mxml setter方法

我可以做到这一点,当它的主要应用程序,我想通过使用调用;

Application.application.methodName(); 

但是我怎样才能调用一个自定义组件的方法?我的部件是在我的元件封装和IM尝试以下

components.customComponent.methodName() 

但它没有发生, 任何想法?


我自定义的及部件的实例调用ActionScript类,所以我不想再实例化动作里面的自定义类,我只是想调用一个setter方法...

任何其他的想法?

回答

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

像这样的方法可能会更好地为您服务。是否有意义?我会留意我们的评论;张贴回来,我会尽我所能来帮助你通过它。

0

以这种方式引用组件需要该方法是静态的。

如果要调用组件实例的方法,请为其分配一个ID并从定义该组件的视图中调用该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方法是不同的。

0

你需要确保你有一个从你试图调用它的组件的实例引用。所以在下面的例子中你可以看到我创建了一个B的实例在A类的构造函数中。所以现在我有一个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 
    { 

    } 
} 

您可以将Class A视为您的Application.mxml和class b作为您的自定义组件。所以无论你想要调用它,你都需要确保你的组件已经被创建。

相关问题