2010-11-30 6 views
1

Je commande:Les paramètres Grails.pass du contrôleur vers le fichier externe .js?

package plugin 

class TestController { 

def simply = {[name:new Date()]} 
} 

que vous voyez que je passe param name

ma page vue:

<html> 
<head> 
<!-- <script type="text/javascript" src="${resource(dir:'resource/js',file:'simply.js')}?color=FA8DFF">--> 

<g:javascript> 
    alert("${name}") 
</g:javascript> 
</head> 
<body> 
</body> 
</html> 

cette course page correcte - afrer charge i voir fenêtre d'alerte avec la date actuelle:

mais, lorsque

page Vue:

<html> 
<head> 
<script type="text/javascript" src="${resource(dir:'resource/js',file:'simply.js')}?color=FA8DF"> 
</script> 
</head> 
<body> 
</body> 
</html> 

et fichier simply.js externe:

alert("${name}") 

i voir la fenêtre d'alerte vide. Donc, ma question: comment je peux passer des paramètres au fichier external.js?

Répondre

4

Il y a deux étapes dans l'analyse de la vue lorsqu'elle est affichée à l'utilisateur. L'état un est le serveur exécutant tout code contenu dans la page d'affichage. Dans votre cas

${name} 

Est convertie en date du jour puisque c'est la valeur du contrôleur. Cela signifie que le texte envoyé au navigateur des utilisateurs contient 3/2/2010 au lieu de $ {name}

La seconde étape qui se déroule lorsque l'utilisateur accède à une vue est le navigateur qui analyse le code HTML. Le code HTML envoyé au navigateur dépend de ce qui s'est passé sur le serveur. Puisque dans votre exemple le JavaScript est contenu dans la vue $ {nom} est remplacé par la date actuelle sur le serveur. Ensuite, le code JavaScript contenant 3/3/2010 est envoyé au navigateur car $ {name} a été remplacé par 3/3/2010 sur le serveur. Cela signifie que la boîte popup contiendra 3/3/2010. Si vous incluez des fichiers JavaScript externes, ils ne sont jamais exécutés dans la première étape car le navigateur les télécharge directement et ne fait aucune demande au serveur. Cela signifie que la première étape n'a jamais lieu donc $ [name] ne sera pas remplacé par la valeur de votre contrôleur. Ce comportement est le même temps, vous utilisez le

<script> 

ou

<g:javascript> 
tag

. Afin de passer des valeurs d'une vue dans JavaScript situé dans un fichier externe, vous devez définir votre JavaScript en tant que fonctions dans les fichiers externes si vous souhaitez passer des paramètres. Par exemple, dans external.js

Function dispDate(theParam) 
{ 
Alert(theParam); 
} 

Puis, de votre point de vue

<g:javascript src="external.js" /> 
<script type="text/JavaScript"> 
dispDate(“${name}”); 
</script> 

Où external.js est stocké dans le répertoire de la web-app /.

+0

wow, une merveilleuse façon! mais ce serait les Grails lui-même rendre le fichier externe – user471011

Questions connexes