0

私のアプリケーションにはカスタム アイテム レンダラーを備えたツリーがあり、リーフのデータの種類に応じて、さまざまなコンポーネントをエディターとして使用します。あるケースでは、ユーザーがニーズに合った行を選択できるようにデータグリッドを使用しようとしています (複数の列を表示する必要があります)。ComboBox と概念が似ています。

これを行うには、データグリッドを動的に作成し、ポップアップ マネージャーを使用して (モーダル) ポップアップとして表示する「itemEditBegin」(ツリー用) のハンドラーとして関数を割り当てます。ここまでは順調ですね。

ただし、どこかをクリックすると (たとえば、データグリッドのスクロール ダウン ボタン)、itemEditEnd イベントが発生するため、ポップアップが消えます。

別のシナリオでは、エディターとして DateField をセットアップしており、ユーザーはアイコンをクリックして DateChooser を表示したり、月をスクロールしたりできます。私のコードとまったく同じ方法で!

「itemEditBegin」コードは次のとおりです。

dataGrid = new DataGrid();
dataGrid.dataProvider = mddTable.dataCollection;
dataGrid.editable = false;
PopUpManager.addPopUp(dataGrid, this, true);

ここで、「this」はツリー レンダラーが行に対して使用するコンポーネントです。データグリッド内の何かがクリックされるとすぐに呼び出されるのは、ツリー コンポーネントの「itemEditEnd」ハンドラーです (例: 行、スクロール ダウン ボタン、列区切りなど)。

アイデアはありますか?

ありがとう、

マイク。

4

2 に答える 2

2

完全に理解するには、コード、または実際に機能しているコードを確認する必要があると思います。DataGridをitemEditorとして使用している場合、個々のDataGrid列は編集可能であるように思われます。あれは正しいですか?

DataGridのitemEditorからフォーカスを外すと、itemEditEndイベントが発生します。あなたの木はどういうわけかこれに反応しているに違いありません。DataGridクラスでイベントの伝播を停止してみてください。概念的には次のようなものです。

<mx:DataGrid>
 <mx:Script>
   public function oItemEditEnd(event:DataGridEvent):void{
     event.stopPropogation();
   }
 </mx:Script>
 <mx:columns>
   <mx:DataGridColumn itemEditEnd="onItemEditEnd(event)">
   <mx:DataGridColumn itemEditEnd="onItemEditEnd(event)">
 </mx:columns>
</mx:DataGrid>

これを行う場合は、ユーザーが編集を完了したことを把握し、itemEditorを手動で閉じるために何かを行う必要があります。

stopPropogation()の詳細。。stopImmediatePropogation()もチェックしてください。コードの構造によって異なるため、どちらが必要かわかりません。

于 2011-04-18T13:33:43.363 に答える
1

最終的に、問題を解決する解決策を見つけました。次の行に追加するだけです。

dataGrid.owner = this;

未熟な itemEditEnd イベントの問題を解決しました。ただし、ツリーの別の行をクリックするまで itemEditEnd イベントが発生しないという反対の問題があります。

値の1つがクリックされたときにデータグリッドを破棄するデータグリッドに「アイテムクリック」リスナーがありますが、これを行うだけでは、基になるツリー行のitemEditEndイベントが発生しません。コンポーネントがフォーカスを失うことが原因であるというドキュメントを読んだので、独自の「FocusEvent.FOCUS_OUT」イベントをディスパッチしました-ダメです。

フォーカスを基になるツリーに手動で変更すると、itemEditEnd イベントが発生し、すべて問題ありませんが、ツリーの参照をツリー レンダラーの行オブジェクトに渡さなければならないのは少し面倒です。

誰もがより良いアイデアを持っていますか?

ありがとう、

マイク

于 2011-05-16T10:55:39.303 に答える