1


1

actionscriptクラスから私のカスタムコンポーネントのactionscriptブロック内のsetterメソッドを呼び出そうとしています。

そのメインアプリケーションを使用して呼び出したい場合は、これで問題ありません。

Application.application.methodName();

しかし、どのように私はカスタムコンポーネントからメソッドを呼び出すことができますか? 私のコンポーネントは私のコンポーネントパッケージの中にあり、私は次のことを試みている

components.customComponent.methodName()

しかし、それは起きていない、何か考え?

'' '' '

私のカスタムコンポーネントのインスタンスはactionscriptクラスを呼び出すので、私はactionscriptの中で再びカスタムクラスをインスタンス化したくない、私はただセッターメソッドを呼び出したいのですが…​

他のアイデア?

3 Answer


2


メソッドを静的にする必要はありません。メソッド呼び出しでコンポーネントの現在の状態で何かを実行したいのであれば、そうするのは無駄でしょう。おそらく、そのデータの一部を使用したり、外観を変更したりするなどです。 本当に必要なのはオブジェクト参照です。

Application.applicationは伝説的な表示リストの一番上(または実際には一番上に近い位置)にあるので、その時点から始めてhttp://livedocs.adobe.com/flex/から各コンポーネントにアクセスできるはずです。 3 / html / help.html?content = 05_Display_Programming_09.html [最終的には、ネストされたコンポーネントにたどり着くまで、そのパブリックに定義されたメソッドを呼び出すまで]

しかし、私はあなたが危険なOO水域に向かって冒険していることを(最大の敬意を持って)言っておかなければなりません。 :)これを行う正しい方法は、実際にはカスタムコンポーネントへのアクセスを必要とするActionScriptクラスにカスタムコンポーネントへの参照を渡すための何らかの方法を考え出すことです。

プライベート関数this_creationComplete(event:Event):void {var yourObject:YourClass = new YourClass(yourCustomComponent);} }
  1. and then in your ActionScript class:

public class YourClass {private var componentReference:YourCustomComponent;

パブリック関数YourClass(コンポーネント:YourCustomComponent){this.componentReference = componentReference; }

プライベート関数yourMethod():void {th​​is.componentReference.someMethodDefinedInYourComponent();} }}

そのようなアプローチはおそらくあなたにもっと役に立つでしょう。 それは理にかなっていますか? 私たちはコメントを待ち望んでいます。戻って投稿し、私はそれを通してあなたを助けるために最善を尽くします。


0


その方法でコンポーネントを参照するには、メソッドが静的である必要があります。

コンポーネントのインスタンスでメソッドを呼び出す場合は、それにIDを割り当て、そのコンポーネントを定義したビューから呼び出します。

// inside a script block
myComp.mySetter(someObj)

ちなみに、ActionScriptの「セッターメソッド」は、次の構文を使用して定義されたものです。

パブリック関数set myProperty(varName:String):void {... }

プロパティ値を設定するのと同じように、 ":"と呼ぶことができます。

myComp.mySetter = myObj;

他の多くの言語では、「セッターメソッド」は命名規則を除いて他のメソッドとまったく同じです。 AS3の本当の設定メソッドは違うということを理解する価値があります。


0


あなたはそれを呼び出そうとしている場所からそのコンポーネントのインスタンスへの参照があることを確認する必要があります。 したがって、以下の例では、クラスAのコンストラクタ内にBのインスタンスを作成したことがわかります。 だから今私はBのインスタンスを持っています 今そのインスタンスから私はb.someMethod()を呼び出すことができます

パブリッククラスA {パブリック関数A(){var b:B = new B(); b.someMethod(); }}

パブリッククラスB {パブリック関数B(){}

パブリック関数someMethod():void {

}}

クラスAをApplication.mxmlとして、クラスbをカスタムコンポーネントとして考えることができます。 それで、あなたがそれを呼び出そうとしているときはいつでも、あなたはあなたのコンポーネントが作成されたことを確かめる必要があります。