3

簡単にするために、2 つのフレックス mxml ページがあるとします。

フォーム.mxml ボタン
.mxml

form.mxml ページに次のコードが含まれていれば、正常に動作するはずです。

<custom:SelectView dSource="{_thedata}" id="form" visible="false">
</custom:SelectView>

<mx:LinkButton label="Show" id="lbShow" click="form.visible=true;>
<mx:LinkButton label="Show" id="lbHide" click="form.visible=false;>

しかし、コードが次のような場合:

フォーム.mxml

 <custom:SelectView dSource="{_thedata}" id="form" visible="false">
 </custom:SelectView>

ボタン.mxml

<mx:LinkButton label="Show" id="lbShow" click="form.visible=true;>
<mx:LinkButton label="Show" id="lbHide" click="form.visible=false;>

button.mxml から呼び出して form.mxml を変更するにはどうすればよいですか

---- もう少し詳しく ---

私のページは実際には次のようになります: query:AdvancedSearchFields は基本的にフレックス フォームをページに含めており、検索が完了した後に下のカスタム ビューを表示/非表示にしたいと考えています。

<query:AdvancedSearchFields searchType="projects" searchCategory="advanced" visible="true" id="AdvancedSearch" />

<custom:SelectView dSource="{_searchResults}" id="sv" visible="false">
4

3 に答える 3

4

ボタン クリック イベントを処理し、カスタム イベントを発生させるカスタム メソッドを作成できます。次に、form.mxml でそのイベントを処理できます。

このように分割すると、button.mxml ファイルが単独で機能するため、少しすっきりします。Button.mxml にフォームへの直接参照を持たせると、2 つの間の密結合が発生します。通常、密結合は避ける必要があります。

編集:密結合を回避し、少し単純な別の考えがありました:

フォーム.mxml

<custom:SelectView dSource="{_thedata}" id="form" visible="{buttons.showForm}">
</custom:SelectView>

<!-- include your buttons.mxml component using an ID of "buttons" -->

ボタン.mxml

<mx:Script>
<![CDATA[
    [Bindable] public var showForm:Boolean = true;
]]>
</mx:Script>

<mx:LinkButton label="Show" id="lbShow" click="this.showForm=true;">
<mx:LinkButton label="Hide" id="lbHide" click="this.showForm=false;">

これは基本的に、変数バインディングを使用してカスタム イベントを使用してエミュレートします。ボタンの showForm 変数が変更されるたびに、SelectView の visible プロパティがバインディングを介して更新されます。これは、カスタム イベントを作成するよりも軽量です (ただし、カスタム イベントは、そのための設計としては少し優れていると思います)。

于 2008-10-09T15:51:49.527 に答える
0

この問題にもっと頻繁に対処する必要がある場合は、PureMVCのようなMVCフレームワークを使用することをお勧めします。これは、MXMLコンポーネントからのイベントをリッスンし、他のメディエーターが取得できる通知を送信するメディエーターオブジェクトを持つように設定されています。次に、そのメディエーターは、通知とそれに関連するデータに基づいて、独自のビジュアルコンポーネントを操作できます。

あなたがしていること(単純なバージョン)の文脈では、あなたは基本的な解決策で大丈夫です。しかし、多くのロジックを備えた4つまたは5つ以上のコンポーネントを処理すると、まったく満足できなくなります。

于 2008-10-14T04:41:03.140 に答える
0

クラスbutton.mxmlには、影響を受ける「フォーム」クラスのインスタンスへの参照が必要です。次に、それを直接操作できます。

ボタン.mxml:

<mx:Script>
<![CDATA[
    [Bindable] public var myForm:MyFormClass;
]]>
</mx:Script>

<mx:LinkButton label="Show" id="lbShow" click="myForm.form.visible=true;">
<mx:LinkButton label="Show" id="lbHide" click="myForm.form.visible=false;">

一般に、この変数を設定する最も論理的な場所は、Buttonクラスの親です。

于 2008-10-09T15:44:50.803 に答える