0

モバイルアプリ用のFlashBuilderを使用して、「コードビハインド」の正しいアプローチを見つけようとしています。

  1. フレックスモバイルAIRプロジェクトを作成しています(「タブ付きビュー」テンプレートに基づく)
  2. UIをデザインモードに設定する
  3. 今、私はすべてのロジックを別のクラスに入れて、それに応じてUIの外観を変更したいと思っています

簡単そうに聞こえますが、私はそれを行うためのアプローチを実際に得ることができません、どんな助けもありがたいです:)

アップデート:

メインアプリ:

<?xml version="1.0" encoding="utf-8"?>
<s:TabbedViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                                  xmlns:s="library://ns.adobe.com/flex/spark" applicationDPI="160">
    <s:ViewNavigator label="a" width="100%" height="100%" firstView="views.aView"/>
    <s:ViewNavigator label="b" width="100%" height="100%" firstView="views.bView"/>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
</s:TabbedViewNavigatorApplication>

ビューA:

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" title="a">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <s:Label id="txt" x="280" y="139" text="Label"/>
</s:View>

だから今私はMyClassに私のロジックに従ってtxttextFieldを変更させたいのですが、正しいアプローチは何ですか?

4

3 に答える 3

0

All you do is make an AS file that has the same base class as whatever your MXML object was initially set up as, for example if it's a VGroup make MyBaseClass extends VGroup, then change the VGroup to MyBaseClass.

Example

[Main.mxml]

<main:MainBase 
   xmlns:main="*"
   ...>
</main:MainBase>

[MainBase.as]

public class MainBase extends Application
于 2012-05-31T14:48:47.650 に答える
0

コードビハインドを基本クラス(または抽象クラス)と考えてください。抽象クラスでは、メソッドの実際の実装またはプロパティの背後にある「実際のオブジェクト」が、提供する拡張クラスに任せられるのが非常に一般的です。

これは、Flashの基本クラスをカスタムクラスに設定する場合とまったく同じですが、実際のメンバーオブジェクト(ボタンなど)は、ライブラリインスタンスがクリップにリンクされているMovieClipのステージに提供されます。

コードビハインドの詳細については、こちらのブログ投稿をご覧ください。ここで説明されているテンプレートコンポーネントのコードを確認したい場合は、こちらをご覧ください。テンプレートコンポーネントはSparkの世界(IMO)ではあまり役に立ちませんが。

于 2012-05-31T17:13:01.597 に答える
0

エレガントな方法は、IMXMLObjectを実装することです。このインターフェイスを実装する場合、IMXMLObject#initializeメソッドは、コンポーネント(Object型の名前付きドキュメント)とオプションのid(String型の)を引数として取り、uはこのパターンを簡単に実装できます。大きな利点は、継承よりも合成を使用することです。インターフェイスを使用する場合は、ビューの動作としてミックスインを保存する一種のタイプとして使用できます。

    package net.icodeapp.examples.views
    {
      import flash.events.MouseEvent;

      import mx.core.IMXMLObject;
      import mx.events.FlexEvent;

      public class ViewBaseModel implements IMXMLObject
      {
        //-------------------------------------------------------------------------
        //
        //          Properties
        //
        //-------------------------------------------------------------------------

        private var _id:String;

        private var _viewBase:ViewBase;

        protected function set viewBase(value:ViewBase):void
        {
          _viewBase = value;

          if (!_viewBase)
            throw new ArgumentError('View must be instance of ViewBase');

          if (!_viewBase.initialized)
            _viewBase.addEventListener(FlexEvent.CREATION_COMPLETE, viewBase_creationCompleteHandler, false, 0, true);
          else
            viewCreationCompleted();
        }

        //-------------------------------------------------------------------------
        //
        //          Constructor
        //
        //-------------------------------------------------------------------------

        public function ViewBaseModel()
        {
        }

        //-------------------------------------------------------------------------
        //
        //          Methods
        //
        //-------------------------------------------------------------------------

        public function initialized(document:Object, id:String):void
        {
          viewBase = document as ViewBase;
          _id = id;
        }

        private function viewCreationCompleted():void
        {
          _viewBase.addEventListener(MouseEvent.CLICK, viewBase_clickHandler);
        }

        //-------------------------------------------------------------------------
        //
        //          Event Handler
        //
        //-------------------------------------------------------------------------

        private function viewBase_creationCompleteHandler(event:FlexEvent):void
        {
          viewCreationCompleted();
        }

        private function viewBase_clickHandler(event:MouseEvent):void
        {
          // todo: do some action
        }
      }
    }

モデルが初期化され、参照がフレームワークによって設定されます。生成されたActionScriptコードを確認すると、モデルがインスタンス化された後、コンストラクターで呼び出されたIMXMLObject#initializeが表示されます。

    <?xml version="1.0"?>
    <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
                 xmlns:views="net.icodeapp.examples.views.*">
      <fx:Declarations>
        <views:ViewBaseModel/>
      </fx:Declarations>
    </s:Group>

モデルはビューによってイベントによって受信され、モデルのメソッドを呼び出すことができます。

于 2012-05-31T21:59:10.230 に答える