0

OK、誰かがFlex4のmxmlで状態を実行するための実際の構文を教えてもらえますか?

私は次の両方を見てきました(そして両方を実装しました)が、どちらの方法が「正しい」か、または好ましいかわかりません。

の中に<fx:Declarations>

<fx:Declarations>
  ...
  <s:State name="state1" />
  <s:State name="state2" />
  <s:State name="state3" />
</fx:Declarations>

<s:Button id="button1" ... />
...
<more components>

また

コンポーネントの「最上位」レベル

<s:states>
  <s:State name="state1" />
  <s:State name="state2" />
  <s:State name="state3" />
</s:states>

<s:Button id="button1" ... />
...
<more components>
4

1 に答える 1

2

おそらく2番目のもの。しかし、それはあなたが何をしようとしているのかによります。

この構文:

<fx:Declarations>
  ...
  <s:State name="state1" />
  <s:State name="state2" />
  <s:State name="state3" />
</fx:Declarations>

クラスStateのコンポーネント内に3つの変数を作成します。これは、ActionScriptで次のようなことを行うのと同じです。

var myState1 : State = new State();
var myState1 : State = new State();
var myState1 : State = new State();

コンポーネントに状態を作成するときは、状態を作成するだけでは不十分です。状態を現在のコンポーネントの状態として割り当てる必要があります。

これが、2番目の構文が実際に行うことです。

<s:states>
  <s:State name="state1" />
  <s:State name="state2" />
  <s:State name="state3" />
</s:states>

これにより、3つの状態変数が配列として作成され、それらが最上位コンポーネントの状態プロパティに割り当てられます。概念的には、ActionScriptでは次のようになります。

var myState1 : State = new State();
var myState1 : State = new State();
var myState1 : State = new State();
this.states = new Array();
this.states.push(myState1);
this.states.push(myState2);
this.states.push(myState3);

コンパイラが最初の構文で何らかの魔法を使ってそれらの状態インスタンスを作成し、それらを状態配列に割り当てることは完全に可能ですが、よくわかりません。誰もがその構文を使用するのを見たことがありません。私は両方のアプローチがコンパイルされることを期待します。2番目のアプローチでは、切り替え可能なコンポーネントに実際に状態を作成することしか期待できません。

于 2011-09-28T22:50:29.263 に答える