2011-02-06 16 views
2

私は、アプリケーションを再生するためにすべてのソースファイルをロードする必要のないシステムを構築する方法を探しています。私の過去のプロジェクトには200以上の.jsファイルがありました(私は冗談ではありません!)、あなたが開発した機能をテストするためにページリロードを行うのは本当に遅かったです。Factoryメソッドの戻り値を正しくJsDocできますか?

Dojoを調べたところ、どのように動的ローダーが構築されているのか分かりました。基本的には、単一のコアコンポーネントをロードするだけです。必要な場合は、他のすべてがロードされます。

var user = MyApp.create('MyApp.model.User'); 

の代わりに:私は、私はJavaScriptでのオブジェクトの新しいインスタンスを構築することができます私のアプリケーションでファクトリメソッドの実装を考えています

推論を、なぜ私は思います前者の方法では、コンポーネントがまだ存在しない場合に、遅延ロードされた方法でコンポーネントを動的にロードすることができるためです。ファクトリメソッドは、ターゲットオブジェクトが定義されているかどうかを調べることができます。ターゲットオブジェクトが定義されていれば、それをロードします。

私はそれに直面しています唯一の問題はIDEには、もはやuserは確かに良いことではありませんMyApp.model.Userのタイプであることを理解事実です。

このジレンマを解決する方法はありますか?どういうわけかJsDocをファクトリメソッドといいますか?

答えて

1

ファクトリメソッドが引数に基づいてさまざまなタイプのオブジェクトを返す場合、ファクトリメソッド自体の戻り値をIDEで理解できるように(@returnsを使用して)ドキュメント化することはできません。少なくとも私はそれをする方法を知らない。

しかし、あなたは、このようなオブジェクトを保持する変数を、注釈を付けることによって、簡単に、あなたの問題を解決することができます:もちろん

/** 
* @type {MyApp.model.User} 
*/ 
var user = MyApp.create('MyApp.model.User'); 

、私はあなたの特定のIDEがこれを解釈することができるかどうかわかりません。私の缶は(コモドを使って)できます。

+0

私はこれをずっとやっています。問題はあなたが自分自身を繰り返していることです。私がしたいことはDRY(あなた自身をやめてください)です。私はオブジェクトを作成する場所の100で指定する代わりに、ファクトリメソッドで一度指定したいと思います。 – Tower

+0

しかし、あなたのファクトリがその1つの特定の型を返さない場合、特定の戻り値の型(IDEが必要とするもの)を文書化することはできません。あなたがそれをそのように置くなら、それは単に行えません。おそらくあなたが望むものではない、あらゆる種類のオブジェクトに対して別々の工場が必要です。 – hashchange

+1

これは確かに実行できますが、JsDocの現在のバージョンでは実行できません。工場を文書化する方法があるかもしれません。つまり、IDEが渡した文字列をファクトリに読み込み、返されたオブジェクトがそのものであると仮定します。 – Tower

関連する問題