Drag and Drop - Как получить DragSource для события DragStart - PullRequest
1 голос
/ 11 августа 2011

Когда я начинаю операцию перетаскивания, я хотел бы иметь возможность выделить возможные допустимые объекты 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 ]

3 голосов
/ 11 августа 2011

Проблема здесь в том, что ваш dragStartHandler имеет более высокий приоритет, чем внутренний DragStartHandler компонентов Списка - именно там начинается операция перетаскивания и создается свойство dragSource.

Предложение, добавьте вручную свой dragStartHandler с более низкимприоритет перед методом dragStartHandler компонентов List - при взгляде на код должно быть меньше -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...
}

Надеюсь, вы найдете это полезным.

0 голосов
/ 11 августа 2011

Это встроенное решение для перетаскивания в flex

мы можем реализовать дескрипторы объектов для всех компонентов, которые легко перетаскивать, перетаскивать и изменять размер.

см. Это http://code.google.com/p/flex-object-handles/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...