2011-12-14 5 views
19

require.jsは、モジュール内でオブジェクトを定義する方法をdefine([requiremens], object)といいます。js ruinsコードナビゲーションを使用する

したがって、すべてのページまたは他のjsファイルは、require()パラメータを呼び出して受信します。

これはかなり機能します。各機能/モジュールには独自の名前空間があります。

// AJAX/Requests.js 

define(['UI/Message'],function(Message){ 
var Requests={ 
    checkResponse:function(response){ 
     //1==ok 
     //0==error 
     //2==good message 
     //3==good message, but still stop 
     if(response.status==1){ 
      return true; 
     } 
     else if(response.status==2){ 
      Message.good(response.message); 
      return true; 
     } 
     else if(response.status==3){ 
      Message.good(response.message); 
      return false; 
     } 
     else{ 
      Message.bad(response.message); 
      return false; 
     } 
    } 
}; 
return Requests; 
}); 

今すぐUI /メッセージは同じように定義されており、それは、オブジェクトを返します。

問題

は、私が持っているということです。

しかし、リクエストでファイルを編集するとコードでナビゲートできません。メッセージオブジェクトを編集したい場合、唯一の方法はファイルを開いて自分のファイルを開き、必要な機能を見つけることですIDEが私のためにそこに飛び乗る。

この問題を解決するためにpycharmを具体的に回避する方法や、require.jsを一般的に回避する方法がありますか?コードをたくさん持っていると、それをナビゲートするのが面倒になるので、最初はIDEを使用しています!

さらに悪いことに、エディタはオブジェクトの機能を知りません!

私が見ることのできる1つの解決策は、囲まれた名前空間を使用しないで、define()コールの前にグローバル変数を宣言することです。この場合、すべてのオブジェクトはUI_Message、AJAX_Requestsのように呼び出されます。確かに、私は2つの異なる場所にいくつかのメッセージを持っていません....

そしてrequire.jsオプティマイザがこれを正しく使用するかわかりません。 Require.jsドキュメントは、グローバル変数から遠ざかるように非常に明確です。

+0

これは修正されましたか? – singsuyash

答えて

8

known issueです。スター/投票してください。

問題の説明から:

道場ライブラリ)がロードモジュール の代わりに、dojo.require(のためのAMDのフォーマットを定義()に切り替えます。以前は、 dojo.require( 'path.to.someJs')でCtrl + Bを使用して宣言にジャンプできました。これは は新しい形式(['path/to/someJs]'、...)で動作しません。

PyCharm、WebStorm、PhpStorm、およびIntelliJ IDEAが同じJavaScriptプラグインを共有するため、この問題は使用している製品にも当てはまります。このバグが修正されるまで、記載されている問題を継続して観察してください。ご不便おかけしてすみません。それがあっても動作しますが、どうやら

//foo.js 
define(function(require, exports, module) { 
    //use exports to expose properties for code navigation in other modules 
    exports.bar = function() {} 
}); 

:あなたはCommonJs wrapperとあなたのモジュールを定義し、輸出とモジュールの引数を使用している場合

+3

JetBrainsはこの問題の基本を実装していますが、依然としてパス設定をサポートしていません(相対パスに制限されています)。モジュールにアクセスするには、定義自体をクリックする必要があります。 : –

+0

これに関する更新は – cdeszaq

+0

WebStorm 8では改善されています。機能の検索*用途の検索*と* Go To Declaration * [既に今すぐ動作します](http://stackoverflow.com/a/21954895/623816)、リファクタリングにはまだ改善が必要です。 –

3

WebStorm(少​​なくとも6.0.2)はRequireJsとコードナビゲーションをサポートしています他のIDEを使用している場合

define(['./foo'], function(foo) { 
    foo.bar(); //code navigation works here 
} 

同じJavaScriptのプラグインCrazyCoderが、それは同様に彼らの新しいリリースでも動作するかもしれ言ったように:それを使用してモジュールがCommonJsラッパー形式を使用しません。

関連する問題