[mapguide-users] OnSelectionChanged in AJAX viewer?

Kenneth, GEOGRAF A/S ks at geograf.dk
Mon Apr 28 09:24:27 EDT 2008


No, OnSelectionChanged is also a JavaScript function in the Ajax viewer.

Regards, Kenneth, GEOGRAF A/S



Tanja Suikkanen skrev:
>
> Thanks you both, but I think these don't work, cause I have Ajax 
> viewer and OnSelectionChanged is an ActiveX control.
>
>  
>
> Any ideas with Ajax?
>
>  
>
> Tanja
>
>  
>
>  
>
> *From:* mapguide-users-bounces at lists.osgeo.org 
> [mailto:mapguide-users-bounces at lists.osgeo.org] *On Behalf Of 
> *Kenneth, GEOGRAF A/S
> *Sent:* 28. huhtikuuta 2008 16:01
> *To:* MapGuide Users Mail List
> *Subject:* Re: [mapguide-users] OnSelectionChanged in AJAX viewer?
>
>  
>
> I made a small mistake.
>
> The retry condition should not be:
> if (mapFrame == null)
>             window.setTimeout("RetryInit();", 500);
>
> but
> if (originalMapFrameOnSelectionChanged == null)
> {
>     mapFrame = null;
>     window.setTimeout("RetryInit();", 500);
> }
>
> Because the frame may exist, but the function might be missing.
>
>
> Regards, Kenneth, GEOGRAF A/S
>
>
>
> Kenneth, GEOGRAF A/S skrev:
>
> You must safeguard against timing problems.
> It is very likely that your frame will load completely before the 
> iframe does.
> In that case, you cannot get the OnSelectionChanged method reference.
> You can add an "onload" to the iframe, but it is still possible that 
> it will break, because the internal frames do not load in the expected 
> order.
> A simple fix is to wrap your "InitDocument" with a timer.
>
> Also, using the "frames[0].frames[1]" is relying on the order of your 
> page, and the order of the viewer frames.
> A more reliable method, is to use the ID if the frame element, and 
> then use the built-in method GetMapFrame().
>
> I have applied the above to your example:
>
> <!-- Javascript part -->
> <script type="text/javascript">
>     var mapFrame = null;   // A reference to the map frame
>     var originalMapFrameOnSelectionChanged = null // storage for the 
> original onSelectionChanged function
>     function OnSelectionChanged() // when something is selected on the map
>     {
>         alert('Your handler works perfectly');
>         originalMapFrameOnSelectionChanged();
>     }
>   
>     function InitDocument()
>     {
>         var win = document.getElementById('viewerFrame');
>         if (win.contentWindow) //FF returns the actual tag, IE returns 
> the iframe
>           win = win.contentWindow;
>         mapFrameRef = win.GetMapFrame();
> originalMapFrameOnSelectionChanged = 
> mapFrameRef.parent.OnSelectionChanged;
>         mapFrameRef.parent.OnSelectionChanged = 
> OnSelectionChanged;             
>     }  
>
>     function RetryInit()
>     {
>         if (mapFrame != null)
>             return;
>            
>         try
>         {
>             InitDocument();
>         }
>         catch (e)
>         {
>             mapFrame = null;
>         }
>        
>         if (mapFrame == null)
>             window.setTimeout("RetryInit();", 500);
>     }
> </script>
>
> <!-- HTML part -->
> <html>
> <body>
>     <iframe id="viewerFrame" frameborder="yes" width="100%" 
> height="60%" src=" 
> src="../mapviewernet/dwfviewer.aspx?SESSION=<%=sessionId%>&WEBLAYOUT=<%=webLayout%>"" 
> onload="RetryInit()"></iframe>
> </body>
> </html>
>
>
>
>
> Regards, Kenneth, GEOGRAF A/S
>   
>
>
>
> Kimmo Kotajärvi skrev:
>
> Here's my solution (simplified):
>
>  
>
> <!-- Javascript part -->
>
>  
>
> <script type="text/javascript">
>
>     var mapFrame = null;   // A reference to the map frame
>
>     var originalMapFrameOnSelectionChanged = null // storage for the 
> original onSelectionChanged function
>
>    
>
>     function OnSelectionChanged() // when something is selected on the map
>
>     {
>
>         alert('Your handler works perfectly');
>
>         originalMapFrameOnSelectionChanged();
>
>     }
>
>    
>
>     function InitDocument()
>
>     {
>
>         mapFrameRef = frames[0].frames[1];
>
> originalMapFrameOnSelectionChanged = 
> mapFrameRef.parent.OnSelectionChanged;
>
>         mapFrameRef.parent.OnSelectionChanged = 
> OnSelectionChanged;              
>
>     }   
>
> </script>
>
>  
>
> <!-- HTML part -->
>
>  
>
> <html>
>
> <body onload="javascript:InitDocument()" <javascript:InitDocument()>>
>
>         <iframe id="viewerFrame" frameborder="yes" width="100%" 
> height="60%" src=" 
> src="../mapviewernet/dwfviewer.aspx?SESSION=<%=sessionId%>&WEBLAYOUT=<%=webLayout%>""></iframe>
>
> </body>
>
> </html>
>
>  
>
>  
>
> So, body onload calls InitDocument which registers the new 
> OnSelectionChanged event handler. The new handler only pops up a 
> dialog box and then calls the old function. The MG Viewer is embedded 
> in an iframe.
>
>  
>
>  
>
> ------------------------------------------------------------------------
>
> *Lähettäjä:* mapguide-users-bounces at lists.osgeo.org 
> <mailto:mapguide-users-bounces at lists.osgeo.org> 
> [mailto:mapguide-users-bounces at lists.osgeo.org] *Puolesta *Tanja Suikkanen
> *Lähetetty:* 28. huhtikuuta 2008 14:10
> *Vastaanottaja:* mapguide-users at lists.osgeo.org 
> <mailto:mapguide-users at lists.osgeo.org>
> *Aihe:* Re: [mapguide-users] OnSelectionChanged in AJAX viewer?
>
>  
>
> My map is embedded in my own page.
>
> When a user selects one or more features on the map, I want my own 
> function to be executed.
>
> But doesn't parent.parent.mapFrame still get me the map frame..?
>
> And this works but only when I click some button.
>
>  
>
> Tanja
>
>  
>
>  
>
> *From:* Kenneth, GEOGRAF A/S [mailto:ks at geograf.dk]
> *Sent:* 28. huhtikuuta 2008 13:57
> *To:* tanja.suikkanen at dimenteq.fi 
> <mailto:tanja.suikkanen at dimenteq.fi>; MapGuide Users Mail List
> *Subject:* SPAM-LOW: Re: [mapguide-users] OnSelectionChanged in AJAX 
> viewer?
>
>  
>
> Are you issuing the script from a command?
>
> If you want to do this all the time (regardless of what the user has 
> done), you must load the script with the solution.
> If your map is embedded in another page, you can load the script 
> there, and change "var map = parent.parent.mapFrame;" to point to the 
> correct frame.
> If it is just the basic layout, you can try to put it in the page that 
> loads in the taskpane (but beware that the document gets unloaded if 
> the user navigates).
> As a last resort, you can embed the script in the viewerfiles.
>
> In case you can use the embedded map approach, you should place the 
> following line after the "try {":
> map = document.getElementById('<insert iframe/frame id>').GetMapFrame()
>
> Regards, Kenneth, GEOGRAF A/S
>
>
>
> Tanja Suikkanen skrev:
>
> Ok, I sent my code snippet earlier today, but here it is again.
>
> I got this example from 
> http://trac.osgeo.org/mapguide/wiki/CodeSamples/JavaScript/AJAXViewerEventHooking.
>
>  
>
> var map = parent.parent.mapFrame;
>
>  
>
>     var origOnSelectionChanged = null;
>
>  
>
>     function MySelectionHandler()
>
>     {
>
>         origOnSelectionChanged();
>
>  
>
>         var selCount = map.GetSelectedCount();
>
>         if(selCount > 0)
>
>         {
>
>             My function() {}
>
>         }
>
>     }
>
>  
>
>     window.onload = function() {
>
>        
>
>         var timer;
>
>  
>
>         var watch = function() {
>
>        
>
>             try {
>
>                 if(map.mapInit) {
>
>  
>
>                     clearInterval(timer);
>
>  
>
>                     origOnSelectionChanged = map.OnSelectionChanged;
>
>  
>
>                     map.OnSelectionChanged = MySelectionHandler;
>
>                 }
>
>             }
>
>             catch(e) {
>
>             }
>
>         };
>
>    
>
>         timer = setInterval(watch, 200);
>
>     };
>
>  
>
> Window.onload function is executed only, if I press a button.
>
> I want to have the functionality I was telling you about without any 
> button clicks.
>
> Please ask if I don't tell you enough.
>
>  
>
> Tanja
>
>  
>
>  
>
> *From:* Ivan Milicevic [mailto:Ivan.Milicevic at supranet.hr]
> *Sent:* 28. huhtikuuta 2008 12:04
> *To:* tanja.suikkanen at dimenteq.fi 
> <mailto:tanja.suikkanen at dimenteq.fi>; MapGuide Users Mail List
> *Subject:* RE: [mapguide-users] OnSelectionChanged in AJAX viewer?
>
>  
>
> Feature doesn't get highlighted?
>
>  
>
> Of course that you can add this functionality  in your own code, the 
> logic is same. Allwas call mapFrame functions (via JavaScript) or 
> count selection from C# or PHP.
>
>  
>
> If you want to get some help over here, be more specific.
>
>  
>
> Ivan.
>
>  
>
> *From:* mapguide-users-bounces at lists.osgeo.org 
> <mailto:mapguide-users-bounces at lists.osgeo.org> 
> [mailto:mapguide-users-bounces at lists.osgeo.org] *On Behalf Of *Tanja 
> Suikkanen
> *Sent:* Monday, April 28, 2008 10:46 AM
> *To:* mapguide-users at lists.osgeo.org 
> <mailto:mapguide-users at lists.osgeo.org>
> *Subject:* RE: [mapguide-users] OnSelectionChanged in AJAX viewer?
>
>  
>
> Ok, now it worked but some functionality had been removed?
>
> When I first select a feature, everything goes fine but when I select 
> another feature, that doesn't get highlighted...
>
> Also I wouldn't like to change the original files, just add my own 
> functionality in my own code files.
>
> But thanks anyway!
>
>  
>
> Tanja
>
> ------------------------------------------------------------------------
>
>
>   
>  
> _______________________________________________
> mapguide-users mailing list
> mapguide-users at lists.osgeo.org <mailto:mapguide-users at lists.osgeo.org>
> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>   
>  
> ------------------------------------------------------------------------
>
>
>   
>  
> _______________________________________________
> mapguide-users mailing list
> mapguide-users at lists.osgeo.org <mailto:mapguide-users at lists.osgeo.org>
> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> mapguide-users mailing list
> mapguide-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/mapguide-users/attachments/20080428/7e6fca21/attachment.html


More information about the mapguide-users mailing list