Je crée un ensemble de balises personnalisées ColdFusion conçues pour faciliter la réutilisation de certains éléments de mise en page. Je vais les utiliser d'une manière similaire à ce qui suit:Comment faire pour qu'un bloc de code dans une balise personnalisée s'exécute uniquement la première fois que la balise est appelée?
<cfimport prefix="layout" taglib="commonfunctions/layouttags">
<layout:fadingbox>
This text will fade in and out
</layout:fadingbox>
<layout:stockticker>
This text will scroll across the screen
</layout>
Pour le code de ces balises personnalisées génère au travail, un fichier javascript doit être lié dans la page comme ceci:
<script src="commonfunctions/layouttags/enablingscript.js" type="text/javascript"></script>
Je préférerais inclure le script à l'intérieur des balises personnalisées, au lieu de demander à l'utilisateur de l'inclure lui-même. Le problème est que le fichier javascript ne doit être inclus une fois par page. Après la première utilisation de l'une de ces balises personnalisées, je souhaite que les appels suivants soient effectués sur la même balise sur la même page pour éviter de répéter le tag <script>. Il m'est apparu que je pouvais faire quelque chose comme ça ...
<cfif NOT isDefined("Caller.LayoutTagInitialized")>
<script src="commonfunctions/layouttags/enablingscript.js" type="text/javascript"></script>
</cfif>
<cfset Caller.LayoutTagInitialized = 1>
... Mais il semble inélégant. Je me demande, y a-t-il un meilleur moyen? Comment appliqueriez-vous cela?
Edition - Précision:
Dans le cas que j'ai écrit ci-dessus n'a pas de sens, voici un exemple plus détaillé:
Si j'ai une balise personnalisée comme ça ...
<cfif ThisTag.ExecutionMode EQ "start">
<script src="commonfunctions/layouttags/enablingscript.js" type="text/javascript"></script>
<div class="mytag">
<cfelse>
</div>
</cfif>
... et je balisage CFML appeler la balise comme comme ça ...
<layout:mytag>
One
</layout:mytag>
<layout:mytag>
Two
</layout:mytag>
<layout:mytag>
Three
</layout:mytag>
... Je veux HTML comme suit pour générer:
<!-- Script included only the first time the tag is called -->
<script src="commonfunctions/layouttags/enablingscript.js" type="text/javascript"></script>
<div class="mytag">
One
</div>
<!-- No <script> tag on the second call -->
<div class="mytag">
Two
</div>
<!-- No <script> tag on the third call -->
<div class="mytag">
Three
</div>
Je sais à ce sujet. Ce n'est pas de ça que je parle. Voici ce que je veux: Balise de script incl ici, Mais pas ici Et aussi pas ici.. Voir? –
Question éditée pour clarifier. –
ah, je vois ce que tu veux dire. Je ne pense pas qu'il y ait quelque chose de mal dans la façon dont vous l'avez mis en œuvre. J'utiliserais probablement la portée de la demande au lieu de la portée de l'appelant, mais c'est plus la préférence que tout. –