ThinkGeo.com    |     Documentation    |     Premium Support

Question about Drag Marker features

 Hi,


I try to use the drag marker feature but so far no luck  with the event that we should expect when the marker is dragged then released.  From a broader point of view could you explain how the events chain works?  For instance


on the view side:




.OnClientClick("_OnClientClick")
.OnClientDrawEnd("_OnClientDrawEnd")
.OnClientBaseOverlayChanged("_OnClientBaseOverlayChanged")
.OnClientExtentChanged("_OnClientExtentChanged")
.OnClientTrackShapeFinished("_OnClientTrackShapeFinished")
.Render();



now if we have "OnClientClick" for the "SimpleMarkerOverlay" what is the effect of 
having "OnClientClick" at the map level?


now if we have "OnClientClick" for the "SimpleMarkerOverlay" and "markerOverlay.OnClientMarkerDragged = "_ClientOnClientMarkerDragged";"

for the "SimpleMarkerOverlay" how this will work?
last but no least,  it looks like that when a marker has been created and display on the map then the click on marker need two clicks???
the marker drag event as I state before does not work as well.
thanks.
jm.







 


 


 


 


 


 here is the code in the controller. 


 



 SimpleMarkerOverlay markerOverlay = map.CustomOverlays["SimpleMarkerOverlay"] as SimpleMarkerOverlay;                 markerOverlay.DragMode = MarkerDragMode.Drag;                 markerOverlay.OnClientMarkerDragged = "_ClientOnClientMarkerDragged";                 markerOverlay.Markers.Clear();                 markerOverlay.Markers.Add(NewMarkerProperties(_locationPointShape));

<c>   </c>


here is the code in the view:


 



 

 



 overlays
     .SimpleMarkerOverlay("SimpleMarkerOverlay")
     .Id("SimpleMarkerOverlay")
     .Name("SimpleMarkerOverlay")
     .IsVisible(true)
     .IsVisibleInOverlaySwitcher(false)
     .IsBaseOverlay(false)
         .DragMode(MarkerDragMode.Drag)
         .OnClientClick("_OnClientClickOnMarker");


here is the code in the script:


 




function _ClientOnClientMarkerDragged(location) {
    ClientMarkerDragged(location);
}


 More questions?


why do we have :




  SimpleMarkerOverlay markerOverlay = map.CustomOverlays["SimpleMarkerOverlay"] as SimpleMarkerOverlay;
                markerOverlay.DragMode = MarkerDragMode.Drag;
                markerOverlay.OnClientMarkerDragged = "_ClientOnClientMarkerDragged";
                markerOverlay.Markers.Clear();
                markerOverlay.Markers.Add(NewMarkerProperties(_locationPointShape));

when customizing the SimpleMarkerOverlay on the controller side and the same property is not available on the view side???  overlays


     .SimpleMarkerOverlay("SimpleMarkerOverlay")
     .Id("SimpleMarkerOverlay")
     .Name("SimpleMarkerOverlay")
     .IsVisible(true)
     .IsVisibleInOverlaySwitcher(false)
     .IsBaseOverlay(false)
         .DragMode(MarkerDragMode.Drag)
         .OnClientClick("_OnClientClickOnMarker");



 


Hi JM,
 
Let me explain those events one by one.
·         Map.OnClientClick, this event would be handled by the map object.
·         OnClientBaseOverlayChanged, this event would also be registered on  map’s event, it raised when we change the base layer of the map object.
·         OnClientExtentChanged, this event would also be registered on  map object and will be raised when there is a move behavior to the map.
·         OnClientDrawEnd, the event would be bind into the DrawFeature control’s featureAdded event in the end, in other words, it will be raised after you have drawn a shape on the map.
·         OnClientTrackShapeFinished, the event would be bind on the ModifyFeature control’s onModificationEnd in the end.
·         SimpleMarkerOverlay. OnClientClick, this event would be registered on marker layer’s click event at last.
 
Q1: now if we have "OnClientClick" for the "SimpleMarkerOverlay" what is the effect of 
having "OnClientClick" at the map level?
 
After testing all the events, we can know the marker layer’s click event would be fired at first and the map click event would not be fired even we still bind the click event on the map. Because the DOM event bubble is prevented.
 


<divre style="background: white"></divre>
Q2: now if we have "OnClientClick" for the "SimpleMarkerOverlay" and "markerOverlay.OnClientMarkerDragged = "_ClientOnClientMarkerDragged";"


 

 


 
We also just found that if we add the  OnClientMarkerDragged event for SimpleMarkerOverlay on the fly in an action. This event would not work. I guess this is a bug. And a work around here is we add the event when init the map. However, you might also would found there is no such Api for us in Razor view to add the event for  SimpleMarkerOverlay. So, we can only init the map in the controller like the traditional way and then we can use this event.
 
I have attached some codes which might be help you to understand those events.
If you still have any questions, please let us know.
 
Thanks

Johnny



Post11224.zip (1.85 KB)