2011-11-12 11 views
0

私はFlash Builder 4.5を使用してモバイルAIRアプリケーションを構築しています。ビューパッケージの初期ビューはTestHomeView.mxmlです。私は、アプリの他の場所での私の.asクラスの1つでそれを参照したいと思います。どうすればよいのか分かりません。コードのスパークビューコンポーネントを参照してください

理論上、私はTestHomeView.mxmlに "id"属性を追加することができますが、FBは私に "idはコンポーネントのルートタグには許可されていません"というエラーを表示します。ルートタグはs:viewです。

これを行う必要がある理由は、別のクラスではさまざまな計算を行い、ビュークラスのコンポーネントに値の配列を渡す必要があるからです。 、私はまたにビュークラスをインポートする必要があり、私はそれをするつもりだ場合

myViewComponent.viewArray = myArray; 

:だからSomeOtherActionScriptClass.asに私が最初の配列、myarrayのを組み立てて、そのクラスに私はこれをしたいです.asクラス、それは私を奇妙なものとして襲う。だから、私が欲しいことをする簡単な方法がありますか、または配列を含むカスタムイベントをディスパッチして、それをビュークラスでリッスンする必要がありますか?

EDIT - 私はモデルで、以下のなかった以下のMVCの提案に基づいて:

[Bindable] 
public class Model 
    { 
    private static var myModel:Model;//doesn't let me name it 'model' because 
            //I have a package named 'model' 
    public var myArray:Array; //its value set later in model code 
public function Model() 
{ 
    if (Model.myModel != null){ 
     throw new Error("Only one Model instance should be instantiated"); 
     } 
    } 

    // singleton: always returns the one existing static instance to itself 
    public static function getInstance() : Model { 
     if (myModel == null){ 
      myModel = new Model(); 
     } 
     return myModel; 
    } 

その後、私が持っているビューのコードで:

[Bindable] //do I actually need this? 
private var myModel:Model = Model.getInstance(); 
var viewArray = new Array(); 
viewArray = myModel.myArray; 

しかし、それは戻ってヌル来ています。 Modelクラスにブレークポイントを置くとnullではありませんが、ビュークラスからブレークポイントにアクセスしようとするとnullになります。モデル自体はnullではありませんが、その変数はnullです。

私は間違っていますか?

ありがとうございました。

答えて

0

まず、AS3でシングルトンを作成しようとする場合は、最初にクラスを作成できるようにするために、モデルと同じクラスファイル内にクラスを作成する必要があります。

(Modelクラスの外)モデルクラスファイルの一番下にこのクラスを追加します。

internal class SingletonEnforcer{} 

次に、このようなモデルのコンストラクタを作成します。

public function Model(enforcer:SingletonEnforcer){ Init(); } // if init code is needed 

public static function get Instance():Model 
{ 
    if (!myModel){ 
     myModel = new Model(new SingletonEnforcer()); 
    } 
    return myModel; 
} 

今、あなたはしないでください可能でないために2番目のインスタンスを作成するための例外をスローする必要があります。

私はあなたのアプリケーションのメインMXMLを参照のあなたの最初の質問についてはよく分からないんだけど、あなたは(AIRでのWindowedApplicationのような)が実行されているアプリを呼び出す方法を求めていたならば、あなたはこのようにそれを呼び出します。

// my WindowedApplication file = MyApp.mxml 
MyApp(this.parentApplication) 

これは、アプリのインスタンスを返します。

私はあなたの上にそれを持っているように、あなたがシングルトンを設定したら、あなたのような配列にアクセスすることができるはずです。私はこのことができます願ってい

Model.Instance.myArray; 

+0

Paul - 助けてくれてありがとう。私はテストするためのシンプルなアプリケーションを作成し、あなたのコードが動作します!親アプリケーションは、それを呼び出すクラスがUIComponentである(または継承している)限り、機能します。私の元の問題はまだ残っていますが、何とか私の配列をnullにリセットしているコードで何か他のことが起こっていることを意味するはずです。私はそれを狩る必要があります。 – David

+0

あなたのコードでは、配列を初期化する場所は表示されません。 var myArray:Array = ["AS3"、 "Flex"]; –

0

MVCパターンに従います。
プロパティviewArrayでモデルクラスを作成(バインド可能にする)します。ビューからこのプロパティにバインドします。他のどのクラスでもモデルのプロパティをviewArrayに変更するだけです。バインディングイベントが発生し、このプロパティもビューで変更されます。モデルを任意の点から「可視」にするには、モデルをシングルトンにすることができます。

+0

「あなたのビューからこのプロパティにバインドする」とはどういう意味ですか?どうやって?上記の編集をご覧ください。ありがとう。 – David

関連する問題