5

ブレーンストーミングが必要です。Visual Studio2008に組み込まれているJavascriptIntellisenseと一緒にうまく機能しないように見えるJavascriptライブラリ(jQuery、ExtJSなど)に問題があります。これらは、Intellisenseが理解できない特定のユーティリティヘルパー関数を提供します。

すなわち。ExtJSコード

// convenience function to create namespace object placeholders
Ext.namespace("Root.Sub.Subsub");

またはjQuery

// doing the same thing in jQuery
$.extend(window, {
   Root: {
      Sub: {
         Subsub: {}
      } 
   },
});

または(私はこのコードを維持する必要があります)

$.extend(window, { Root: {}});
$.extend(Root, { Sub: {}});
$.extend(Root.Sub, { Subsub: {}});

これらの呼び出しの最終結果は基本的に同じです。Visual Studio2008のJavascriptIntellisenseで名前空間を表示することRootはできません。内部でインテリセンスがどのように機能するかを知っていれば、この状況を克服できる可能性があります。

次のようなオブジェクトを直接記述せずに、Intellisenseにこれらの名前空間を表示/認識するように説得することは可能ですか?

Root = {
   Sub: {
      Subsub: {}
   }
};

最初のjQuery呼び出しはこれと非常に似ていることを認めますが、既存の機能/名前空間の削除/上書きを防ぐために、拡張機能を使用することをお勧めします。

質問

Intellisenseを機能させるには、これらのユーティリティ関数をどのように使用する必要がありますか?
これに光を当てるブレインストーミングの答えは大歓迎ですか?

編集

ユーティリティ関数で作成された名前空間は、外部で(つまり、別のスクリプトファイルで)定義されている場合に表示され、次のようにそのファイルを参照することがわかりました。

/// <reference path="different.script.file.js" />

この場合、すべてが正常です。ただし、同じファイル内でユーティリティ関数を呼び出すと、それらはインテリセンスのドロップダウンリストに表示されません。

4

3 に答える 3

1

jQuery に関する限り:このブログ投稿をご覧ください。この投稿もよく読まれています。

Visual Studio が JavaScript オブジェクトと名前空間を認識できるようにするために、さまざまなことを試しました。

var RootNamespace = {
   SubNamespace: {
      SubSubNamespace: {}
   }
};


アップデート:

開発者 1 は次のように書いています。

var RootNamespace = {
   SubNamespace: {
      SubSubNamespace: {}
   }
};

開発者 2 は次を拡張します。

RootNamespace.SubNamespace.AnotherSubNamespace = {
    alertHelloWorld: function ()
    {
        alert("Hello World!");
    }
};
于 2009-09-14T22:28:28.067 に答える
0

回避策

これらのユーティリティ メソッドは、別のスクリプト ファイルで使用し、それらの名前空間を使用するスクリプト ファイルで参照すると、実際に機能します。

File1.js (新しい名前空間を登録するカスタム jquery 拡張 $.ns() があると仮定します)

$.ns("Project.Controls", "Project.Pages", "Project.General.Utilities");
...

File2.js

/// <reference path="File1.js" />

// use custom namespaces
Project.Controls.InfoWindow = function(){
    ...
};

File2.js では、カスタム名前空間に対する完全な Intellisense サポートが提供されます。

欠点

同じスクリプト ファイル内で動作させることができないように見えるため、別の場所に名前空間を作成する必要があります。

于 2009-09-16T09:18:34.123 に答える
0

オブジェクトを標準の js として宣言してから拡張しようとしても、VS2008 は intelisense を失います。

var opt = {
    SomeProperty: 1,
    SomeFunction: function(name,age) {}
};

opt = jQuery.extend(true, module.options, jQuery.extend(true, {}, opt, module.options));
op.SomeFunction("John", 20) // doesn't intelisense anymore

これを回避するには、関数の拡張操作を移動する必要があります。

var opt = {
    SomeProperty: 1,
    SomeFunction: function(name,age) {}
};

function extendOptions() {
    opt = jQuery.extend(true, module.options, jQuery.extend(true, {}, opt, module.options));
}

extendOptions();
op.SomeFunction("John", 20) // now the intelisense works as expected
于 2009-10-10T10:33:36.273 に答える