サービスからの応答を取得する EmployeeResult という名前のクラスが 1 つあります。resulthandler 内で、名前、ID、年齢などの従業員の配列を取得しています。employeeView.mxml ファイル内に 1 つの dataGrid があります。employeeView.mxml ファイル内には、データグリッドへのデータプロバイダーである ArrayCollection があります。EmployeeResult ファイル内からその arraycollection を更新したいと考えています。Cairngorm フレームワークを使用する場合、シングルトン内で arraycollection を使用して目標を達成しました。mate フレームワークの場合、propertyinjector タグを使用しました。しかし、私の場合、フレームワークなしでこの目的を達成するにはどうすればよいですか。フレームワークやシングルトン クラスを使用せずにプロパティ インジェクションを実現する方法。
質問する
357 次
2 に答える
1
前の質問に続きます:親コンポーネントによってディスパッチされた子コンポーネント内のイベントをリッスンする方法は、その従業員のリストを含むカスタム イベントをディスパッチし、その到着をアプリケーション全体に通知するだけです。
このようなもの:
private function handleMyEmployeeResults(event:ResultEvent):void {
var employees:IList = EmployeeResult(event.result).employeeList;
dispatchEvent(new EmployeeEvent(EmployeeEvent.LIST_LOADED, employees, true));
}
これはサービス結果ハンドラーであるため、そのクラス インスタンスはビューではなく、表示リストに含まれていないと想定できます。これが、イベントがバブルできない理由です。これに対処するために、 でイベントを直接ディスパッチできますstage
。
FlexGlobals.topLevelApplication.stage.dispatchEvent(
new EmployeeEvent(EmployeeEvent.LIST_LOADED, employees)
);
アプリケーション内の任意のビューで、このイベントをリッスンし、それに応じてプロパティを設定できるようになりました。
//inside View1
stage.addEventListener(EmployeeEvent.LIST_LOADED, handleEmployeesLoaded);
private function handleEmployeesLoaded(event:EmployeeEvent):void {
myDataGrid.dataProvider = event.employees;
}
//inside View2
stage.addEventListener(EmployeeEvent.LIST_LOADED, handleEmployeesLoaded);
private function handleEmployeesLoaded(event:EmployeeEvent):void {
myOtherKindOfList.dataProvider = event.employees;
myFirstEmployeeLabel.text =
event.employees[0].firstname + event.employees[0].lastname;
}
別のより簡単なアプローチはApplication
、シングルトンとして使用することです。employeeList
メイン アプリケーションでバインド可能なプロパティを作成します。結果が届いたら、その値を設定します。
private function handleMyEmployeeResults(event:ResultEvent):void {
var employees:IList = EmployeeResult(event.result).employeeList;
FlexGlobals.topLevelApplication.employeeList = employees;
}
これで、アプリケーションのどこからでもこのプロパティにバインドできます。
<View1>
<s:DataGrid dataProvider="{FlexGlobals.topLevelApplication.employeeList}" />
</View1>
<View2>
<s:List dataProvider="{FlexGlobals.topLevelApplication.employeeList}" />
</View2>
このアプローチには、実装が非常に簡単であるというメリットがありますが、Singleton のすべての欠点があります (たとえば、テストしにくいなど)。
于 2012-10-16T16:03:08.007 に答える