Сначала мне понравилось то, что @ Orangepips ответил на @ Anooj's, - это простота будущего обслуживания, а не отдельный блок Javascript каждый раз, когда вы включаете <script>
в свои ОВЛХ.
Однако, после нескольких минут размышлений об этом, это легко устранить, объединив два ответа. Это дает вам модульность для простоты сегодняшней разработки и будущего обслуживания, которое вы ищете - PLUS как лучший метод дает вам изоляцию и кэширование статического Javascript, чтобы уменьшить размер запроса CF-страницы и скорость ответа.
По сути, вы должны создать фасад на основе CF, который вы будете включать или вызывать каждый раз, когда вам нужна функциональность Javascript. В моем примере я сделал фасад вызываемой функцией, в которую можно передавать параметры JS (как намекало @Orangepips), чтобы жестко контролировать, какие переменные передаются в JS.
(Кроме того, я рекомендую помещать все встроенные JS в переменные, а затем помещать их в CFHEADER, чтобы убедиться, что это в заголовке страницы.)
dosomething.js
<script type='text/javascript'>
<!-- assert vars were passed in -->
if ( source == undefined )
alert("Developer error: source not defined.");
return;
}
if ( urlpath == undefined )
alert("Developer error: urlpath not defined.");
return;
}
<!-- do some js stuff --->
alert('source: ' + source + ", urlpath: " + urlpath );
</script>
udf.cfm:
<cffunction name="doSomething" output="true" returntype="void">
<cfargument name="source" required="true" />
<cfargument name="urlpath" required="true" />
<cfsavecontent variable="header">
<script type="text/javascript">
<!-- var init -->
<cfoutput>
var source = '#arguments.source#';
var urlpath = '#arguments.urlpath#';
</cfoutput>
</script>
<script language="JavaScript" type="text/javascript" src="dosomething.js"></script>
</cfsavecontent>
<cfhtmlhead text="#header#">
</cffunction>
application.cfm
<cfinclude template="udf.cfm">
view1.cfm:
<cfoutput>#doSomething("view 1", "http://myurl/view1")#</cfoutput>
view2.cfm:
<cfoutput>#doSomething("view 2", "http://myurl/view2")#</cfoutput>
Любые будущие изменения становятся проще благодаря выделению кода (JS отделен от фасада, определяющего JS-var, отделен от отдельных представлений, вызывающих его). Например. добавив переменную, вы можете сделать ее обратно совместимой, чтобы все существующие представления продолжали работать.
Изменения udf.cfm:
<cfargument name="newVar" required="false" default="" />
<cfif len(arguments.newVar)>
var newVar = "#arguments.newVar#";
</cfif>
Изменения dosomething.js:
// keep JS backwards compatible
if ( newVar != undefined) {
// new var was passed in, do something with it
}
// else, not passed in