Требуется навигация по коду js ruins - PullRequest
19 голосов
/ 14 декабря 2011

require.js устанавливает способ определения объектов внутри модулей с define([requiremens], object) как лучший способ.

Таким образом, каждая страница или другой файл 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;
});

Теперь пользовательский интерфейс / сообщение определены таким же образом, и он возвращает объект.

Но когда я редактирую файл с запросами, я не могу перемещаться по коду, поэтому, если я хочу отредактировать объект сообщения, единственный способ - это самому открыть файл и найти нужную мне функцию, вместо того, чтобы иметь IDE прыгать там для меня.

Есть ли какой-нибудь обходной путь для pycharm специально или для совместного использования require.js для решения этой проблемы? Когда у вас много кода, для навигации становится беспорядком, поэтому я в первую очередь использую IDE!

И что еще хуже: редактор никогда не знает, какие функции есть у объектов!

Единственное возможное решение, которое я вижу, состоит в том, чтобы не использовать вложенные пространства имен и объявлять глобальную переменную перед вызовом define(), но в этом случае все объекты должны вызываться как UI_Message, AJAX_Requests. Чтобы быть уверенным, что у меня нет какого-то Послания в двух разных местах ...

И я не уверен, что оптимизатор require.js будет использовать это правильно. Документация Require.js очень ясна, чтобы держаться подальше от глобальных переменных.

Ответы [ 2 ]

8 голосов
/ 14 декабря 2011

Это известная проблема , пожалуйста, пометьте звездочкой / проголосуйте.

Из описания выпуска:

Библиотека dojo переключилась на формат AMD define () для загрузки модулей вместо dojo.require (). Ранее я мог использовать Ctrl + B на dojo.require ('path.to.someJs'), чтобы перейти к объявлению. Это делает не работает с новым форматом define (['path / to / someJs]', ...).

Поскольку PyCharm, WebStorm, PhpStorm и IntelliJ IDEA используют один и тот же подключаемый модуль JavaScript, эта проблема также относится к используемому вами продукту. Вы будете продолжать наблюдать описанную проблему, пока эта ошибка не будет исправлена. Приносим извинения за неудобства.

3 голосов
/ 16 июля 2013

WebStorm (по крайней мере 6.0.2) поддерживает навигацию по коду с RequireJ, если вы определяете свои модули с помощью оболочки CommonJs и используете exports и аргументы модуля:

//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 используют тот же подключаемый модуль JavaScript, что и CrazyCoder, он может работать и в их более новых версиях.

...