08 December 2006 ~ 4 Comments

Flex 2 Drag Manager isDragging Problem

Uncategorized

I have been working on a project where I get to enjoy using the Drag and Drop features of flex 2. I started my learning by playing around a little bit with having two list controls that I could drag stuff back and forth with. Then I created my own drag and drop enabled controls. Well really i just used the one in the documentation, but I “felt” like I built my own.

Then I started playing with my real goal. Using contents from a HorizontalList control and dragging those onto a custom component. This was actually very simple. All I had to do was tell my HorizontalList to be dragEnabled=”true”. For the drop portion of the adventure i just implemented dragEnter and dragDrop event handlers on my custom component.

My problem came with this. I have other events like rollOver that fire when an item is dragged over them. And I need to know if something is being dragged so I can have them not fire off. Luckily the DragManager class as a boolean property called “isDragging”. From the docs “Read-only property that returns true if a drag is in progress.” Hurray! That sounds like exactly what I needed. So i added that to my event listener and ran my code again. Of course I was shocked to see that my code ran even though i was dragging items around. So I added a label and I bound it to the DragManager.isDragging and ran my app one more time. No matter what I do that is always false.

So here it is. What do I have to do to make DragManager.isDragging be true? Its a read-only property so something has to enable it. What is it that I am missing.

As it stands I just added an isDragging property to my ModelLocator so that I can continue with the project. But I am very curious what causes this property to be true.

Tags:

4 Responses to “Flex 2 Drag Manager isDragging Problem”

  1. Steve Webster 9 December 2006 at 4:59 am Permalink

    The isDragging property is not set up for data binding, so your label won’t update itself when the value of this property changes. Data binding with read-only properties turns out to be a tricky topic, which I’m going to post about on my blog as soon as I’ve finished writing the article.

    I don’t have an answer to your drag/drop conundrum, but you might want to try polling the value of DragManager.isDragging using a Timer instead.

  2. simeon 9 December 2006 at 8:34 am Permalink

    Thanks steven. For now I am ok because I am just doing it on my own. The reason I resorted to watching it via binding was that it was false when I was dragging and a rollover event occurred.

    I will give the timer a try when I get sec. My wife appears to be going into labor so it might be a couple days :)

  3. Steve Webster 9 December 2006 at 8:48 am Permalink

    Simeon: You’re welcome. I’ve posted the article I mentioned on my blog if you’re interested: http://dynamicflash.com/2006/12/databinding-to-read-only-properties-in-flex-2/.

    I’m stoked to hear your wife is having a baby, but if she’s going into labour then you shouldn’t be reading this ;o) Good luck man!

  4. Richard Brookes-Tee 8 March 2007 at 4:45 pm Permalink

    I don’t know if ive just been lucky or because i’m using Flex 2.0.1 but after spending hours
    debugging my code i realsised I was have the same issue, when draging a component
    over another component that already had a rollover event.

    for me placing the DragingManager.isDragging inside my rollover handler fixed my issue.

    onRollOver(e:MouseEvent) : void {
    if (!DragingManager.isDragging) {
    this.currentState = ‘rollover’;
    }
    }

    so thanks for the advice.


PHVsPjxsaT48c3Ryb25nPndvb19hYm91dDwvc3Ryb25nPiAtIEhpISBNeSBuYW1lIGlzIFNpbWVvbiBCYXRlbWFuIGFuZCBJIGFtIGEgd2ViIGFwcGxpY2F0aW9uIGRldmVsb3BlciBzcGVjaWFsaXppbmcgaW4gdGhlIEFkb2JlIEZsYXNoIFBsYXRmb3JtLiAgSSBhbSBhbiBBZG9iZSBDb21tdW5pdHkgUHJvZmVzc2lvbmFsIGFuZCBhbiBBZG9iZSBDZXJ0aWZpZWQgVHJhaW5lciBmb3IgRmxleCBhbmQgQUlSLiAgSSBhbSBhbHNvIHRoZSBQcmluY2lwbGUgSW5zdGlnYXRvciBmb3IgUE5XIFJhaW4gTExDIGEgUklBIGNvbnN1bHRpbmcgYW5kIG1lbnRvcmluZyBjb21wYW55LjwvbGk+PGxpPjxzdHJvbmc+d29vX2Fkc19yb3RhdGU8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfMTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvd29vdGhlbWVzLTEyNXgxMjUtMS5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV8yPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy93b290aGVtZXMtMTI1eDEyNS0yLmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzM8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vYWRzL3dvb3RoZW1lcy0xMjV4MTI1LTMuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfNDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvd29vdGhlbWVzLTEyNXgxMjUtNC5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF90b3A8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3RvcF9hZHNlbnNlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fYWRfdG9wX2ltYWdlPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy93b290aGVtZXMtNDY4eDYwLTIuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfdG9wX3VybDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF8xPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzI8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfMzwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF80PC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWx0X3N0eWxlc2hlZXQ8L3N0cm9uZz4gLSBraGFraS5jc3M8L2xpPjxsaT48c3Ryb25nPndvb19hdXRvX2ltZzwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X21lbnU8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NvbnRlbnRfYXJjaGl2ZXM8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NvbnRlbnRfaG9tZTwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY3VzdG9tX2Nzczwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2N1c3RvbV9mYXZpY29uPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fZmFjZWJvb2s8L3N0cm9uZz4gLSBzaW1iYXRlbWFuPC9saT48bGk+PHN0cm9uZz53b29fZmVlZGJ1cm5lcl91cmw8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19mb290X2NhdF9tZW51PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19mb290X25hdl9leGNsdWRlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fZ29vZ2xlX2FuYWx5dGljczwvc3Ryb25nPiAtIDxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPg0KdmFyIGdhSnNIb3N0ID0gKChcImh0dHBzOlwiID09IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sKSA/IFwiaHR0cHM6Ly9zc2wuXCIgOiBcImh0dHA6Ly93d3cuXCIpOw0KZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoXCIlM0NzY3JpcHQgc3JjPVwnXCIgKyBnYUpzSG9zdCArIFwiZ29vZ2xlLWFuYWx5dGljcy5jb20vZ2EuanNcJyB0eXBlPVwndGV4dC9qYXZhc2NyaXB0XCclM0UlM0Mvc2NyaXB0JTNFXCIpKTsNCjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+DQp0cnkgew0KdmFyIHBhZ2VUcmFja2VyID0gX2dhdC5fZ2V0VHJhY2tlcihcIlVBLTExMTUwNTYtNFwiKTsNCnBhZ2VUcmFja2VyLl90cmFja1BhZ2V2aWV3KCk7DQp9IGNhdGNoKGVycikge308L3NjcmlwdD4NCjwhLS0gUGl3aWsgLS0+DQo8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4NCnZhciBwa0Jhc2VVUkwgPSAoKFwiaHR0cHM6XCIgPT0gZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wpID8gXCJodHRwczovL3N0YXRzLnBud3JhaW4uY29tL1wiIDogXCJodHRwOi8vc3RhdHMucG53cmFpbi5jb20vXCIpOw0KZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoXCIlM0NzY3JpcHQgc3JjPVwnXCIgKyBwa0Jhc2VVUkwgKyBcInBpd2lrLmpzXCcgdHlwZT1cJ3RleHQvamF2YXNjcmlwdFwnJTNFJTNDL3NjcmlwdCUzRVwiKSk7DQo8L3NjcmlwdD48c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4NCnRyeSB7DQp2YXIgcGl3aWtUcmFja2VyID0gUGl3aWsuZ2V0VHJhY2tlcihwa0Jhc2VVUkwgKyBcInBpd2lrLnBocFwiLCAxKTsNCnBpd2lrVHJhY2tlci50cmFja1BhZ2VWaWV3KCk7DQpwaXdpa1RyYWNrZXIuZW5hYmxlTGlua1RyYWNraW5nKCk7DQp9IGNhdGNoKCBlcnIgKSB7fQ0KPC9zY3JpcHQ+PG5vc2NyaXB0PjxwPjxpbWcgc3JjPVwiaHR0cDovL3N0YXRzLnBud3JhaW4uY29tL3Bpd2lrLnBocD9pZHNpdGU9MVwiIHN0eWxlPVwiYm9yZGVyOjBcIiBhbHQ9XCJcIiAvPjwvcD48L25vc2NyaXB0Pg0KPCEtLSBFbmQgUGl3aWsgVGFnIC0tPjwvbGk+PGxpPjxzdHJvbmc+d29vX2xvZ288L3N0cm9uZz4gLSAvYXNzZXRzL2ltYWdlcy9iZWNhdXNlSVNhaWRTby5wbmc8L2xpPjxsaT48c3Ryb25nPndvb19tYW51YWw8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vc3VwcG9ydC90aGVtZS1kb2N1bWVudGF0aW9uL21haW5zdHJlYW08L2xpPjxsaT48c3Ryb25nPndvb19uYXZfZXhjbHVkZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX3Byb2ZpbGU8L3N0cm9uZz4gLSBodHRwOi8vaTMueXRpbWcuY29tL3ZpL3I5YWRpTU5aNEY0L2RlZmF1bHQuanBnPC9saT48bGk+PHN0cm9uZz53b29fcmVzaXplPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX3Nob3J0bmFtZTwvc3Ryb25nPiAtIHdvbzwvbGk+PGxpPjxzdHJvbmc+d29vX3RoZW1lbmFtZTwvc3Ryb25nPiAtIE1haW5zdHJlYW08L2xpPjxsaT48c3Ryb25nPndvb190aHVtYl9oZWlnaHQ8L3N0cm9uZz4gLSAxMDA8L2xpPjxsaT48c3Ryb25nPndvb190aHVtYl93aWR0aDwvc3Ryb25nPiAtIDEwMDwvbGk+PGxpPjxzdHJvbmc+d29vX3R3aXR0ZXI8L3N0cm9uZz4gLSBzaW1iYXRlbWFuPC9saT48L3VsPg==