Ich erstelle eine Reihe von benutzerdefinierten ColdFusion-Tags, die die Wiederverwendung bestimmter Layoutelemente vereinfachen. Ich werde sie in einer Art und Weise ähnlich der folgenden verwenden:Wie kann ich einen Codeblock in einem benutzerdefinierten Tag nur ausführen, wenn das Tag zum ersten Mal aufgerufen wird?
<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>
Damit der Code diese benutzerdefinierten Tags, eine JavaScript-Datei in die Seite verlinkt werden muss arbeiten erzeugt etwa so:
<script src="commonfunctions/layouttags/enablingscript.js" type="text/javascript"></script>
Ich würde es vorziehen, das Skript aus den benutzerdefinierten Tags zu integrieren, anstatt den Benutzer selbst einzuschließen. Das Problem ist, dass die Javascript-Datei nur einmal pro Seite enthalten sollte. Nach dem ersten Mal, wenn eines dieser benutzerdefinierten Tags verwendet wird, möchte ich nachfolgende Aufrufe desselben Tags auf derselben Seite vermeiden, um die Wiederholung des Tags <script> zu vermeiden. Es fiel mir ein, dass ich so etwas tun könnte ...
<cfif NOT isDefined("Caller.LayoutTagInitialized")>
<script src="commonfunctions/layouttags/enablingscript.js" type="text/javascript"></script>
</cfif>
<cfset Caller.LayoutTagInitialized = 1>
... Aber es scheint unelegant. Ich frage mich, gibt es einen besseren Weg? Wie würdest du das umsetzen?
Bearbeiten - Klarstellung:
Falls, was ich oben hatte noch keinen Sinn geschrieben, hier ist ein detaillierteres Beispiel:
Wenn ich einen benutzerdefinierten Tag wie diese ...
<cfif ThisTag.ExecutionMode EQ "start">
<script src="commonfunctions/layouttags/enablingscript.js" type="text/javascript"></script>
<div class="mytag">
<cfelse>
</div>
</cfif>
... und ich habe CFML Markup den Tag wie wie dieser Aufruf ...
<layout:mytag>
One
</layout:mytag>
<layout:mytag>
Two
</layout:mytag>
<layout:mytag>
Three
</layout:mytag>
... Ich möchte HTML wie die folgenden zu erzeugen:
<!-- 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>
Ich weiß darüber. Das ist nicht was ich meine. Das ist, was ich will: Script-Tag inkl hier, Layout: fadingbox> Aber nicht hier Layout: fadingbox> Und auch hier nicht Layout.: Fadingbox>. Sehen? –
Frage bearbeitet, um zu klären. –
ah, ich sehe was du meinst. Ich glaube nicht, dass etwas daran falsch ist, wie Sie es implementiert haben. Ich würde wahrscheinlich den Anforderungsbereich anstelle des Aufruferbereichs verwenden, aber das ist mehr Präferenz als alles andere. –