2011-12-14 10 views
19

require.js indica il modo di definire gli oggetti all'interno dei moduli con define([requiremens], object) come metodo migliore.Richiedi js ruins code navigation

Così ogni pagina, o altro file js, farà require() chiama e riceve moduli come parametri.

Questo funziona abbastanza bene, ogni funzione/modulo ha il proprio spazio dei nomi.

Il problema è che ho:

// 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; 
}); 

Ora la UI/messaggio è definito nello stesso modo, e ritorna oggetto.

Ma quando modifico il file con le richieste, non posso navigare per codice, quindi se voglio modificare oggetto Messaggio, l'unico modo è andare e aprire il file me stesso e trovare la funzione di cui ho bisogno, piuttosto che avere l'IDE salta lì per me.

C'è qualche soluzione per pycharm in particolare o require.js in comune per risolvere questo problema? Quando hai un sacco di codice diventa un disastro per navigarlo, ed è per questo che uso un IDE in primo luogo!

E che peggio: l'editor non sa mai quali funzioni hanno gli oggetti!

L'unica soluzione possibile che vedo è non utilizzare spazi dei nomi chiusi e dichiarare la variabile globale prima della chiamata define(), ma in questo caso tutti gli oggetti devono essere chiamati come UI_Message, AJAX_Requests. Per essere sicuro, che non ho un messaggio in due posizioni diverse ...

E non sono sicuro, se require.js optimizer lo userà correttamente. La documentazione di Require.js afferma molto chiaramente, di stare lontano dalle variabili globali.

+0

È stato risolto? – singsuyash

risposta

8

È un known issue, per favore stelle/voto.

Dalla descrizione problema:

La libreria dojo commutato nel formato di AMD define() per il caricamento dei moduli anziché dojo.require(). In precedenza ero in grado di usare Ctrl + B su dojo.require ('path.to.someJs') per passare alla dichiarazione. Questo non funziona con il nuovo formato (['percorso/su/alcuniJs]', ...).

Come PyCharm, WebStorm, PhpStorm e IntelliJ IDEA quota la stessa JavaScript plug-in, questo problema vale anche per il prodotto che si sta utilizzando. Continuerete ad osservare il problema descritto fino a quando questo errore non verrà risolto. Ci dispiace per l'inconvenienza.

+3

JetBrains ha implementato le nozioni di base su questo problema, tuttavia, non supportano ancora la configurazione dei percorsi (sei limitato ai percorsi relativi) e devi fare clic sulla definizione stessa per accedere al modulo. :( –

+0

Eventuali aggiornamenti su questo? – cdeszaq

+0

Sta migliorando in WebStorm 8. Le funzionalità richieste * Trova usi * e * Vai alla dichiarazione * [funziona già ora] (http://stackoverflow.com/a/21954895/623816), il refactoring ha ancora bisogno di alcuni miglioramenti. –

3

WebStorm (almeno 6.0.2) supporta la navigazione codice con RequireJs se si sta definendo i moduli con la CommonJs wrapper e utilizzare i esportazioni e gli argomenti dei moduli:

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

A quanto pare, funziona anche se il modulo utilizzando non utilizza il formato involucro CommonJs:

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

Se gli altri IDE utilizzano lo stesso plug-in JavaScript come CrazyCoder ha detto, si può lavorare sulle loro versioni più recenti pure.