少し前のGold Coastの記事より。Visual StudioにはJScriptのIntelliSense機能があります。Virtual Earth Map ControlやLive Messenger Libraryには、その機能を活用するためのJScriptファイルも公開されてます。
これらは、とっても有用なんですけどJavaScriptが型の宣言がないため普通にコードを書いているとIntelliSenseの恩恵を受けれないことがしばしば。そこでGold Coastでは試行錯誤のうえのコーディング時のみIntelliSenseを有効にするための記述方法が投稿されてます。
Virtual Earthの場合、VEMapをグローバル変数として持つ必要があるけど、インスタンス化するのはページ読み込み完了時になります。普通に書くと、
こんな感じ。Visual Studioはfoo関数内ではVirtual Earth用のIntelliSenseが働きません。かといって宣言部に var map = new VEMap(); と書くとコーディング時はすべてIntelliSenseが働きますが、実行時に困ります。
そこでBlogによると次の書き方がベターってことみたい。
map宣言部の下に条件文を付けました。実行時は、map = null; となるようにします。じゃあコーディング時はDESIGN_TIMEを宣言しておくのかというと、しません。どうやらVSは上記のように記述しておくとmapの型はVEMapと判断してくれるみたい。コーディング中と実行時に書き換えの必要もないので、かなり利便性アップです。IntelliSense機能を使うときは覚えておきましょう。今回のはグローバル変数に対してでしたが関数内の変数に対しても有効です。詳しくは元ネタへ。
さて、Virtual Earthは以上でよかったのだけど、Messenger Libraryになると複雑です。Messenger Libraryは名前空間を意識した書き方になっているのでちょっと工夫が要ります。私も試行錯誤中なのでベストかはわからない。
こんな感じです。Messenger Libraryの記述方法で名前空間とクラスを作り、自作クラスの中にMicrosoft.Live.Messenger.Userオブジェクトを追加してます。If文の2か所がIntelliSense用に書いたものです。とりあえずうまくいく感じ。もっとスマートなのがあれば教えてください。書いておかないとMessenger Libraryの記述方法では ほとんどIntelliSenseが働きません。これでも恩恵受けれない箇所がいろいろと出てきます。イベントハンドラなんかが多いので。