2011-08-14 18 views
10

È possibile assegnare uno spazio dei nomi a un file JavaScript inserito dinamicamente?Spazio dei nomi contenuto di un file javascript caricato dinamicamente

So che posso includere dinamicamente un file JavaScript creando un tag script e inserirlo nel DOM, ma questo file incluso può essere namespace? Quindi, se il file ha una funzione chiamata bar, vorrei accedervi tramite uno spazio dei nomi, ad esempio foo: ad esempio foo.bar().

risposta

0

Se si intende aggiungere uno spazio dei nomi a tutto ciò che è definito in quel file mentre lo si carica dinamicamente, senza modificare il file stesso, la risposta è no.

6

Sì, CommonJS Modules/1.1 specifica solo un modo per farlo.

L'ho usato solo con Node.js sul lato server, ma credo che ci siano altre librerie create per funzionare con browser che sono compatibili con CommonJS. Fai attenzione che ci sono più specifiche del modulo per server/browser (non l'ho ancora trovato).

moduli sono realizzate come qualsiasi altro pezzo di javascript, l'unica aggiunta è si esporta ciò che si vuole esporre:

module.exports.bar = Bar; 

function Bar() { 
// code 
} 

E l'utilizzo:

var foo = require('mymodule'); 

foo.bar(); 

Ciò che è effettivamente fatto in lo sfondo, l'intero codice è racchiuso in un'altra funzione e le esportazioni sono le sue proprietà.

Inoltre, Michael Bolin talked about similar problem in his talk about 'with' keyword at JSConf.

+0

+1 per il video didattico; contento di imparare nuove cose :) –

+1

CurlJS, requireJS supporta i moduli AMD che sono simili e funzionano senza problemi sul browser. Strumenti come browserify ti permettono di creare bundle Modules/1.1. – Raynos

+1

Non ci sono ancora riuscito a giocare con questo. Una domanda però, ogni file js incluso deve esportare le proprietà per il 'require' per prelevarle? Se questo è il caso, come posso ottenere il namespacing quando includo il file js di terze parti? –

Problemi correlati