特定のレイアウト要素を簡単に再利用できるように設計された一連の ColdFusion カスタム タグを作成しています。次のような方法でそれらを使用します。
<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>
これらのカスタム タグが生成するコードを機能させるには、次のように JavaScript ファイルをページにリンクする必要があります。
<script src="commonfunctions/layouttags/enablingscript.js" type="text/javascript"></script>
ユーザーが自分でスクリプトを含めるのではなく、カスタムタグ内からスクリプトを含めることをお勧めします。問題は、JavaScript ファイルをページごとに 1回だけ含める必要があることです。これらのカスタム タグの 1 つが初めて使用された後、<script> タグの繰り返しを避けるために、同じページの同じタグへの後続の呼び出しが必要です。私はこのようなことができると思いました:
<cfif NOT isDefined("Caller.LayoutTagInitialized")>
<script src="commonfunctions/layouttags/enablingscript.js" type="text/javascript"></script>
</cfif>
<cfset Caller.LayoutTagInitialized = 1>
...しかし、それはエレガントではないようです。
もっと良い方法はないのだろうか?
これをどのように実装しますか?
編集 - 明確化:
上記の説明が意味をなさない場合のために、より詳細な例を次に示します。
次のようなカスタム タグがある場合:
<cfif ThisTag.ExecutionMode EQ "start">
<script src="commonfunctions/layouttags/enablingscript.js" type="text/javascript"></script>
<div class="mytag">
<cfelse>
</div>
</cfif>
...そして、次のようにタグを呼び出す CFML マークアップがあります。
<layout:mytag>
One
</layout:mytag>
<layout:mytag>
Two
</layout:mytag>
<layout:mytag>
Three
</layout:mytag>
...次のようなHTMLを生成したい:
<!-- 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>