2009-04-06 19 views
1

Flexは、データフィードコントロールのユーザー操作に優れたAPIを提供しますが、私の人生の間、データをユーザがそれを使って遊んだら制御する。具体的には、TreeコンポーネントのdragMoveコントロールを有効にしましたが、ユーザーが変更した内容をXMLデータに戻してdbに書き戻す方法を理解できません。Flex:ツリーコントロールからデータを抽出する

ユーザーがツリーを並べ替えた場合、変更はdataProviderのに登録されていない、とdataDescriptorこれらの変更を登録している場合、私は戻ってデータを取得する方法がわかりません。 dataDescriptorのgetData()メソッドは、ノード・パラメータを呼び出します。独自のdataProviderからのノード??理解できません。何か案は?

答えて

1

私は何をしなければならないことはdragOverイベントに耳を傾け、そのハンドラで結果のデータを操作していると信じています。ドラッグドロップサポートは、主に1つのリストコントロールから別のコントロールに移動するためのものです。

1

CookieOfFortuneは正解です。&ドロップだけでなく(たとえば変更を検出してDBに伝播するなど)、ツリー上のドラッグ&ドロップインターフェイスで作業する必要があります。

リスナを設定して、ツリーが変更されたとき(たとえば選択が発生したとき)を検出することもできます。これは、選択とドラッグの両方で動作します&滴。

あなたがしていることを知らない場合は、ここをクリックしてください。私はちょうどイベントがどのように検出されるかを示すためにdragCompleteをオーバーロードしました。ここで

<?xml version='1.0'?> 
<mx:Application xmlns:mx='http://www.adobe.com/2006/mxml' backgroundGradientColors='[0xFFFFFF,0xAAAAAA]'> 

    <mx:Script> 
     <![CDATA[ 
     import mx.events.DragEvent; 
     import mx.controls.Alert; 

     [Bindable] 
     private var treeData:XML = 
      <root> 
       <node label="foo"> 
        <node label="bar" /> 
       </node> 
       <node label="baz"> 
        <node label="buzz"> 
         <node label="foobar" /> 
        </node> 
       </node> 
      </root>; 

     private function detectChange(event:Event):void { 
      Alert.show("change detected!"); 
     } 
     private function detectDragComplete(event:DragEvent):void { 
      Alert.show("drag completed!"); 
     } 

     ]]> 
    </mx:Script> 

    <mx:Tree id="tree" labelField="@label" 
      dataProvider="{treeData.node}" width="200" 
      dragEnabled="true" 
      dropEnabled="true" 
      dragMoveEnabled="true" 
      dragComplete="detectDragComplete(event)" 
      change="detectChange(event)" /> 
</mx:Application> 

は、さまざまなコントロールのドラッグ&ドロップ機能に関するいくつかのより多くの情報といくつかのリンクです:

0

私はこの非常に同じことをしなければなりませんでした。 CollectionEvent.COLLECTION_CHANGEイベントのツリーのdataProviderにイベントリスナーを設定しました。

public function init():void{ 

     //watch the tree dataProvider changes. 
     BindingUtils.bindSetter(setUpDataChangeListner,_tree,["dataProvider"]); 
    } 

    public function setUpDataChangeListner(value:XMLListCollection):void{ 
     //set up the event listener for the dataProvider as long as it is not null 
     if(value) 
      value.addEventListener(CollectionEvent.COLLECTION_CHANGE,onTreeChanged,false,0,true); 
    } 

    public function onTreeChanged(event:CollectionEvent):void{ 
     trace("fun"); 
    } 
関連する問題