J'utilise RequireJS dans ASP.NET. Il existe un contrôle utilisateur qui inclut un fichier script et enregistre un script de démarrage afin de s'initialiser. Voici le code généré:Comment charger un script de manière synchrone avec RequireJS
<script src="script/UserControls/myctrl.js" type="text/javascript"></script>
...
<script type="text/javascript">
function myCtrl1_init() {
// initialize control
// *JS ERROR* because myctrl.js hasn't run yet
Sys.Application.remove_load(myCtrl1_init);
}
Sys.Application.add_load(myCtrl1_init);
</script>
Le fichier myctrl.js ressemble à ceci:
require(['script/dep1', 'script/dep2'], function(dep1, dep2) {
MyCtrl = function() {
};
MyCtrl.init = function(id) {
dep1.doSomething();
}
};
Ainsi, le problème est que le script de démarrage passe avant la Le fichier myctrl.js a eu une chance de s'exécuter. Actuellement, l'appel require utilise une fonction de rappel, qui ne fonctionne évidemment que plus tard, et c'est le problème ... le script revient et le navigateur continue jusqu'au script de démarrage avant la création de MyCtrl.
J'ai essayé simplement d'appeler require(['script/dep1', 'script/dep2']);
en haut du fichier, mais cela ne bloque pas non plus, et le script échoue car les dépendances n'ont pas encore été chargées. Les dépendances sont des modules, en passant, par exemple. ils utilisent define()
.
Existe-t-il un moyen de charger un fichier de script de manière synchrone avec RequireJS? La documentation de l'API indique que "Utiliser RequireJS dans un environnement JavaScript côté serveur avec un chargement synchrone devrait être aussi simple que redéfinir require.load()", mais je n'ai aucune idée de ce que cela signifie.
Des suggestions?
Donc, faites toute l'initialisation de manière asynchrone, hein? Semble raisonnable, mais puis-je compter sur le DOM ayant fini le chargement au moment où myCtrl1_init déclenche? – alekop
@jburke, cela fonctionne, merci. – alekop
Si vous voulez être sûr que myCtrl1_init est déclenché après le DOM, enveloppez le code avec require.ready(). require (["myctrl"], function() {require.ready (function() {fonction myCtrl1_init ..... – jrburke