Treeにドロップ
FlexのTreeコンポーネントは、標準でD&D実装されたり、
一見、よく出来たコンポーネントだなとは思うのですが、
やはり、Windowsのエクスプローラに慣れてる人には、違和感ありまくりで。
一つは、Nodeに対してのDropがないのが目につきます。
Nodeに子があれば、openさせてdrop出来るんですけど、
Nodeに子が無い時が、シンドイです。
そんな時は、
Treeのプロパティを、
dragEnabled="true" dropEnabled="false" dragMoveEnabled="false"
にしておいて、
private function onADGDragEnter(event:DragEvent):void { DragManager.acceptDragDrop(UIComponent(event.target)); } private function onADGDragOver(event:DragEvent):void { adg.selectedIndex = adg.calculateDropIndex(event); }
でTreeを選択状態にしてあげます。コードは、AdvancedDataGridの場合。
そうすると、dragOverでdropする(するかもしれない)行が選択状態になります。
ただこれだと、selectedItemが更新される為、
dragsourceのitemがdragしたオブジェクトではなく、selectedItemになってしまいます。
だもんで、
private function onADGDragStart(event:DragEvent):void { // remember dragItem var seletedItem:XML = _view.dg.selectedItem as XML; _dragItem = seletedItem.copy(); }
的な事をして、dragしたitemを覚えておく必要がありそうです。
また、drop時、dataProviderをゴニョゴニョした場合は、
private function onADGDragDrop(event:DragEvent):void { var iv:IHierarchicalCollectionView = adg.dataProvider as IHierarchicalCollectionView; iv.refresh(); }
コレクションのrefreshが必要かな。
ただ、これはこれで、defaultの行moveが出来なくなるので、それは別途また実装する必要があります。
Treeの用途にもよるでしょうけど、フォルダやファイルのイメージでD&Dしたい場合は、
Nodeにdrop出来たほうが良い気がします。
js
jQ.Mobi
http://www.publickey1.jp/blog/12/iosandroidjavascriptjqmobijquery_mobile.html
JQuery Mobileより軽くて高速とな。
モバイル特化ってのは、なんかよさげです。