2012-01-16 19 views
9

Sto scrivendo alcuni test per un'applicazione che utilizza RequireJS. A causa di come funziona l'applicazione, si prevede di ottenere alcune classi chiamando lo require. Quindi, per il test, ho alcune classi fittizie, ma non voglio doverle mettere in file singoli solo per questo test. Mi piacerebbe molto preferiscono semplicemente define() manualmente dentro il mio file di prova in questo modo:Definizione dei moduli e utilizzo immediato con RequireJS

define('test/foo', function() { 
    return "foo"; 
}); 

define('test/bar', function() { 
    return "bar"; 
}); 

test("...", function() { 
    MyApp.load("test/foo"); // <-- internally, it calls require('test/foo') 
}); 

Il problema qui è che la valutazione di tali moduli è ritardata fino a quando viene sparato un evento di script onload.

Da require.js around line 1600:

//Always save off evaluating the def call until the script onload handler. 
//This allows multiple modules to be in a file without prematurely 
//tracing dependencies, and allows for anonymous module support, 
//where the module name is not known until the script onload event 
//occurs. If no context, use the global queue, and get it processed 
//in the onscript load callback. 
(context ? context.defQueue : globalDefQueue).push([name, deps, callback]); 

C'è qualche modo per attivare manualmente la coda per essere valutato?

risposta

0

Le definizioni del modulo devono essere limitate a una per file (vedere here). Direi che avere più moduli definiti in un singolo file interrompe i meccanismi di caricamento interni, che si basano sull'evento di caricamento dello script per determinare che sia pronto durante la risoluzione delle dipendenze.

anche se è solo per test, mi consiglia di dividere tali definizioni in più file.

speranza che aiuti! Saluti.

+0

È possibile aggiungere più di un modulo per file (prendere in considerazione quando si ottimizzare + minimizzazione dei tutta l'applicazione), Non vi resta che assegnare ad ogni modulo un nome specifico (vedere il primo argomento di stringa per ciascuna funzione 'define' nell'OP). – nickf

+0

Inoltre, i moduli sono solo per il test e sono ** molto ** di base. Un po 'più complicato rispetto all'esempio sopra, ma non molto. Avere ognuno nel proprio file sarebbe troppo disordinato. – nickf

+0

certo, capisco. ma da quello che posso dire dai documenti, l'unico caso in cui si ha un singolo file con più moduli è dopo che si verifica la fase di ottimizzazione/generazione. ad essere onesti, non sono così familiare con requirejs, ma l'ho usato su un paio di progetti. i documenti sono abbastanza chiari però: 'Dovrebbe esserci solo * una * definizione del modulo per file su disco. I moduli possono essere raggruppati in pacchetti ottimizzati dallo strumento di ottimizzazione. ' Vorrei iniziare da lì :) – keeganwatkins

1

Il migliore che ho trovato finora è quello di richiedere in modo asincrono i moduli:

define("test/foo", function() { ... }); 
define("test/bar", function() { ... }); 

require(["test/foo"], function() { 
    var foo = require('test/foo'), 
     bar = require('test/bar'); 
    // continue with the tests.. 
}); 
Problemi correlati