Я создаю набор специальных тегов 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 должен быть включен только на страницу. После первого использования одного из этих пользовательских тегов я бы хотел, чтобы последующие вызовы одного и того же тега на той же странице, чтобы избежать повторения тега < >. Мне пришло в голову, что я мог бы сделать что-то вроде этого ...
<cfif NOT isDefined("Caller.LayoutTagInitialized")>
<script src="commonfunctions/layouttags/enablingscript.js" type="text/javascript"></script>
</cfif>
<cfset Caller.LayoutTagInitialized = 1>
... но кажется неэлегантным. Интересно, есть ли лучший способ? Как бы вы это реализовали?
Edit - Разъяснение:
В случае, что я написал выше, не имеет смысла, вот более подробный пример:
Если у меня есть пользовательский тег, как это ...
<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>
Я знаю об этом. Это не то, о чем я говорю. Это то, что я хочу: Script tag incl here, layout: fadingbox> Но не здесь layout: fadingbox> А также не здесь. Layout: fadingbox>. Видеть? –
Вопрос отредактирован для уточнения. –
ах, я понимаю, что вы имеете в виду. Я не думаю, что что-то не так с тем, как вы его реализовали. Я бы, вероятно, использовал область запроса вместо области вызывающего, но это больше предпочтений, чем что-либо. –