1


0

flexから始めます-方向が正しいかどうかを教えてください(ActionScriptとMXMLの分離)

OReillyの「Programming Flex 3.0」を使用してflexの学習を始めました。 3つの章を完了し、4つ目(ActionScript)を開始した後、第22章が完了するまで待つのに十分な忍耐力がなかったため、練習を開始しました:)

私が今最も心配していることの1つは、デュアルコーディングモード(MXMLとActionScript)です。

以下の私のコードを見てください(* mxmlc design.mxml *を介してコンパイルされ、2番目のファイル「code.as」は同じディレクトリにある必要があります)、視覚デザインとコードの間で使用した分離が適切かどうかアドバイスしてください。

また、* 賢い人がクラスファイル[パッケージ?]として。を使用して同じ例を再コーディングする方法を教えてくれれば、非常にありがたい*。 パッケージのディレクトリ構造の作成に迷いましたが、特に私の例のように2つのファイルがある小さなプロジェクトの場合、最も直感的にわかりませんでした。

'' '' '

コード:design.mxml


'' '' '

コード:code.as

public var res:int = 0;
public var previousOperator:String = "";
public var previousRes:int=0;

public function initializeCalculator():void{
 txtScreen.text = res.toString();
}
public function click(code:String):void{
 if (code=="1" || code=="2" || code=="3" || code=="4" || code=="5" ||
   code=="6" || code=="7" || code=="8" || code=="9" || code=="0"){
  res = res*10 + int(code);
  txtScreen.text = res.toString();
 }
 else if (code=="C"){
  res = 0;
  previousOperator ="";
  previousRes = 0;
  txtScreen.text = res.toString();
 }
 else{
  calculate(code);
 }
}
public function calculate(operator:String):void{
 var tmpRes:int;
 if (previousOperator=="+"){
  tmpRes = previousRes + res;
 }
 else if (previousOperator=="-"){
  tmpRes = previousRes - res;
 }
 else if (previousOperator=="/"){
  tmpRes = previousRes / res;
 }
 else if (previousOperator=="*"){
  tmpRes = previousRes * res;
 }
else{
 tmpRes = res;
}
 previousOperator = operator;
 previousRes = tmpRes;
 txtScreen.text = previousRes.toString();
res = 0;
 if (previousOperator=="=")
 {
  res = tmpRes;
  txtScreen.text=res.toString();
 }
}

PS. この計算機が適切に計算しないというコメントがあれば、それも高く評価されますが、最も重要なのはFlexのベストプラクティスに関するコメントです。

2 Answer


0


Flexアプリケーションでの分離コードの使用に関するこのhttp://www.adobe.com/devnet/flex/quickstart/building_components_using_code_behind/ [例]は、ユーザーインターフェイスとアプリケーションロジックの間のリンクをクリーンアップするのに役立ちます。


0


私は通常 ``内の `CDATA`ブロックにコードを書きます

タグ自体。

    //code here

これは、ほとんどのチュートリアルとAdobeコードサンプルで行われている方法です。 mxmlファイルはActionScriptの class`を表します(ファイルdesign.mxmlはルートパッケージに design`という名前のクラスを作成します)。したがって、コード全体を1つの場所(ファイル)に置くのが理にかなっています - ただし、これは選択の問題です。

コンポーネントのユーザーインターフェイスパーツが最小限であれば、ASファイルのみを使用してそのコンポーネントを作成できます。 テキスト入力とボタンが含まれるパネルのコードをチェックアウトします。

//MyPanel.as inside /your/folder/structure
package your.folder.structure
{
  //import appropriate classes here
  public class MyPanel extends Panel
  {
    [Bindable]
    public var txt:TextInput;
    [Bindable]
    public var btn:Button;
    public function MyPanel(){}
    override protected function createChildren():void
    {
       txt = new TextInput();
       txt.text = "Default text";
       txt.setStyle("color", 0xffff00);
       addChild(txt);
       btn = new Button();
       btn.label = "Click me!"
       btn.addEventListener(MouseEvent.CLICK, handleClick);
       addChild(btn);
    }
    private function handleClick(e:MouseEvent):void
    {
      trace("clicked");
    }
  }
}

(ほぼ)同等のmxmlコードは次のようになります。

        private function handleClick(e:MouseEvent):void
        {
          trace("clicked");
        }