我正在创建一组 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 文件每页只应包含一次。在第一次使用这些自定义标签中的一个之后,我希望后续调用同一页面上的同一标签以避免重复 <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>