19

require.jsモジュール内でオブジェクトを定義する方法をdefine([requiremens], object)as best way で示します。

したがって、すべてのページまたは他の 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/メッセージが同じ方法で定義され、オブジェクトが返されます。

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

この問題を解決するために、特にpycharmまたはrequire.jsに共通の回避策はありますか? コードがたくさんあると、ナビゲートするのが面倒になるので、そもそも IDE を使用します。

さらに悪いことに、エディターはオブジェクトが持つ機能をまったく知りません!

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

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

4

2 に答える 2

8

これは既知の問題です。スターまたは投票してください。

問題の説明から:

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

PyCharm、WebStorm、PhpStorm、および IntelliJ IDEA は同じ JavaScript プラグインを共有しているため、この問題は使用している製品にも当てはまります。このバグが修正されるまで、説明されている問題を観察し続けます。ご不便おかけしてすみません。

于 2011-12-14T16:59:54.753 に答える
3

WebStorm (少なくとも 6.0.2) は、CommonJs ラッパーを使用してモジュールを定義し、エクスポートおよびモジュール引数を使用する場合、RequireJs を使用したコード ナビゲーションをサポートします。

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

どうやら、それを使用するモジュールが CommonJs ラッパー形式を使用していなくても機能します。

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

他の IDE が CrazyCoder が言ったのと同じ JavaScript プラグインを使用している場合、新しいリリースでも動作する可能性があります。

于 2013-07-16T07:24:11.167 に答える