2010-01-15 32 views
1

我只是在FlexExamples閱讀評論:如何將某物放入柔性樹項目中?

有一點要注意關於樹的是,它真的只是其中顯示項目的列表。這意味着什麼,除非該文件夾已打開,否則不能將任何東西放入「文件夾」。即使在這種情況下,用戶體驗也不太正確。因此,請嘗試將所有文​​件夾移出其中一個文件夾,然後摺疊該空文件夾。如果您在文件夾上放置了某些東西,它實際上會在目標文件夾和下面或上面的文件夾之間折起來。這是通過將鼠標移動到文件夾上時顯示的黑線顯示的。如果你「打開」文件夾(唯一的方法是通過箭頭打開它),然後嘗試它,你最終會得到一個額外的拖放區域,該區域基本上是打開的空文件夾的下半部分。這也是由黑線位置表示的。

如果任何項目的中間部分始終可以是「添加到此文件夾」的拖放區域,並且頂部和底部邊緣可能分別落在上方或下方,則會更好。

我剛來同樣的問題。有人已經解決了這個問題嗎?在我的例子中,我在樹中拖動了MoveEnabled,並提供拖動樹項目的能力。但不可能將物品拖入另一個空的物品。您只能拖放上面或下面的空項目拖動項目。

回答

1

我已經處理爲接下來的問題:

  • 在dragOver事件處理程序:啓動一個定時器,以確定多長時間用戶已經拖了項目在當前項目
  • 如果當前項目有沒有孩子,添加一個標題爲「drop item here」的新孩子
  • 在物品被放置後(在dragComplete處理程序中)或者用戶將拖動的物品從當前物品移開(在dragOver處理程序)
1

這是我在做什麼,截至目前:

var i:IListItemRenderer = (event.currentTarget as Tree).indexToItemRenderer((event.currentTarget as Tree).calculateDropIndex(event)); 
var x:XML = XML(i.data); 
if (x.children().length() == 0 && [email protected] != 'Drop Node Here') 
    x.appendChild("<node title='Drop Node Here' />"); 

我一定要得到,那是因爲我的樹是動態構建的樹。但無論如何,這會將節點添加到任何沒有子節點的節點,並且只會添加一個節點。現在我只需要設置一個計時器,只有當您將鼠標懸停在節點上時纔會發生。

+0

是的,這就是我所做的,除了我不使用XML。 – Thomas 2010-01-20 15:28:14

2

我不喜歡這樣寫道:

protected function onDragOver(event:DragEvent):void { 
    event.preventDefault(); 
    event.currentTarget.hideDropFeedback(event);     

    try { 
     var index:int = tree.calculateDropIndex(event); 
    } catch(e:Error) { 
     DragManager.showFeedback(DragManager.NONE); 
     return; 
    } 

    tree.selectedIndex = index; 

    var draggedOverItem:Object = tree.selectedItem; 
} 

或許有,甚至比配置將selectedIndex和使用selectedItem屬性更好的辦法?

0

我的解決方法:

子類AdvancedDataGrid和覆蓋showDropFeedback。在致電super.showDropFeedback之前,如果其沒有子項的空文件夾打開您正在拖動的節點。