VE JavaScript Intellisense Helper bug & workaround

A bug has been discovered when using the Virtual Earth JavaScript Intellisense Helper where JavaScript Intellisense fails to surface in a very common scenario.  The scenario is when you have declared a page level map variable.  You will get Intellisense in the JavaScript function where you instantiate the map variable.  However, you will not in other functions:

image 

In the example above, you would get Intellisense for map in GetMap(), but not in Find().  The problem is that Visual Studio 2008 JavaScript Intellisense engine does not know that GetMap() gets called before Find().  Therefore, there is no way to know that the map variable used inside the Find() function is an instantiation of the VEMap class.  We are investigating the best guidance on how to handle this scenario in Visual Studio 2008. 

On the surface, the workaround seems simple.  You just need to make sure the map variable is a page level instantiation like so:

image 

Of course, this poses a problem at runtime because VEMap doesn't have access to the 'myMap' div yet.  That's the whole reason people put their map init code in window.onload, body.onload, or pageLoad() for ASP.NET AJAX based solutions.  So what to do?  For now, here is what I am doing and what I have checked-in to source control for our upcoming release that will be in sync with the Virtual Earth Map Control 6.1:

image

The good news is that you really don't have to comment/uncomment while you are developing.  The code above will "work" as is.  I say "work" because you will get an annoying script error for the "var map = new VEMap();" line of code, but the rest of your page will function as expected.  You just want to make sure you fix things for production:).  Although this is a little bit annoying, I think it is small price to pay for getting JavaScript Intellisense for the Virtual Earth Map Control.

-Marc

Technorati Tags: virtual earth,visual studioa,ajax,asp.net