拖放 - 如何在DragStart事件上获取DragSource

时间:2011-08-11 09:20:41

标签: flex flex4

当我开始拖动操作时,我希望能够突出显示可能的有效Drop对象。为此,我需要知道拖动操作何时开始以及拖动哪些项目。我试图使用dragStart执行此操作,但event.dragSource在此事件上为null。

我有这个清单:

<s:List
    width="100%"
    height="100%"
    id="productsListing" 
    dragEnabled="true"
    dataProvider="{products}"
    dragStart="dragStartHandler(event);"
    dragComplete="dragCompleteHandler(event);"
    itemRenderer="views.productListed" />

我有听众:

public function dragStartHandler(event:DragEvent):void {
    var itemsVector:Vector.<Object> = event.dragSource.dataForFormat('itemsByIndex') as Vector.<Object>;
    //Verify Items
    //Highlight appropriated dropZones
}

任何人都有一个很好的消化方法如何克服这个问题?

2 个答案:

答案 0 :(得分:3)

这里的问题是你的dragStartHandler的优先级高于List组件内部的dragStartHandler - 这是启动拖动操作并创建dragSource属性的地方。

建议,手动添加dragStartHandler,其优先级低于List组件dragStartHandler方法 - 查看代码需要小于-50。

MXML代码:

<s:List width="100%" height="100%"
        id="productsListing"  
        dragEnabled="true"   
        dataProvider="{products}"
        initialize="productsListing_initializeHandler(event)"
        dragComplete="productsListing_dragCompleteHandler(event)"
        itemRenderer="views.productListed"
        />

AS代码:

protected function productsListing_initializeHandler(event:FlexEvent):void
{
    // Needs to be handled AFTER the List component has handled the event and attached the dragSource data, hence priority is -51
    this.productsListing.addEventListener(DragEvent.DRAG_START, productsListing_dragStartHandler, false, -51, true);
}

protected function productsListing_dragStartHandler(event:DragEvent):void
{
    // Your code here...
}

我希望你发现它很有用。

答案 1 :(得分:0)

这是用于在flex中拖放的内置解决方案

我们可以为所有组件实现对象句柄 它很容易拖放,调整大小。

参考此http://code.google.com/p/flex-object-handles/