0

私は高度なモジュラー GUI システムを開発中です。できるだけ柔軟で、できればできるだけ多くの人に役立つようにする必要があります(ただし、かなりニッチになります)。

私が考えさせられている私の設計の部分は、各コンポーネントがアプリケーションの残りの部分とどのように相互作用するのが最善かということです。

私は2つのアプローチを見ています:

  1. コンポーネントが動作するセッターのクラスと名前を渡します。これにより、必要に応じてセッター内からイベントをディスパッチできます。
  2. コンポーネントがディスパッチする CustomEvent を関連データとともに渡します。これにより、多くのイベントリスナーが発生し、複雑さが増す可能性があると思います。

しかし、ベストプラクティスとは何ですか? それぞれの長所と短所は何ですか?より良い方法はありますか?

  1. 基本的な例:

    public class Button extends Sprite
    {
    private var _property:String;
    private var _object:*;
    
    public function Button(label:String, object:*, property:String) 
    { 
        _property = property;
        _object = object;
        addEventListener(MouseEvent.CLICK,  onClick);
    } 
    
    private function onClick(e:MouseEvent):void
    {
        _object[_property] = "Changed";
    }
    
    }
    
  2. 基本的な例:

    public class Button extends Sprite
    {
    private var _event:GuiEvent;
    
    public function Button(label:String, event:GuiEvent) 
    {
        _event = event;
        addEventListener(MouseEvent.CLICK,  onClick);
    }
    
    private function onClick(e:MouseEvent):void
    {
        dispatchEvent(new GuiEvent(_event.type, "Changed"));
    }
    
    }
    
4

2 に答える 2

0

少しオフトピックであり、実際にはあなたの質問に対する答えではありません:

なぜすでに存在するものを再現するのですか?GUIコンポーネントを備えた実証済みのライブラリがすでにあります。

たとえば、AS3 TempleLibraryhttp
: //code.google.com/p/templelibrary/を取り上げます。

すべてのタイプのフォーム要素コンポーネントがあります。チェックボックス、ラジオボタン、コンボボックス、入力フィールド、ファイルフィールド、scrollcomponent、日付セレクター、(ステップ)スライダー、リスト、スクロールバー、オートコンプリートフィールド、およびすべてのタイプのボタン。また、検証に役立つFormクラスがあり、あらゆるタイプのサービスにデータを配信します。また、タブインデックスを正しく管理し、すべてのコントロールをキーボードでも使用できます。これは、誰もが期待するとおりに機能します。モックアップのコードコンポーネントもありますが、同じコードを使用して、ライブラリアイテム、タイムライン、または任意の方法で無限の創造性を発揮してスタイルを設定できます。ほとんどのGUIコンポーネントは、ニーズに合わせて拡張できるように設計されています。

ほとんどのGUIコンポーネントは、通常のイベントリスナー(コンテンツが変更されたときにほとんどのディスパッチEvent.CHANGE)で動作します。ほとんどの場合、新しいタイプのイベントにラップする必要はありません。

于 2012-04-13T11:57:36.270 に答える
0

GUI フレームワークを誰にとっても役立つものにしたい場合は、新しいイベントを発明するのではなく、標準のイベントを使用する必要があります。2 番目のオプションは進むべき道ですが、物事をシンプルに保つようにしてください。例 2 で作成したコードは、信じられないほど複雑に見えます。次のように簡単に書くことができます。

public class Button extends Sprite
{

    public function Button(label:String) 
    {
    }

}

その後、誰もが知っているイベントを使用してクリックを処理できます。

button.addEventListener(MouseEvent.CLICK, onClick);
于 2012-04-12T09:51:08.840 に答える