Coldfusion8 のページがあり、次のようにいくつかの変数を前もって宣言しています。
<cfif (structKeyExists(url,"extern"))>
<cfset variables.someVar = "value">
<cfelse>
<cfset variables.someVar = "">
</cfif>
これに続いて、私はロードしているいくつかのテンプレートを持っています:
<cfinclude template="templates/tmp_pagetop.cfm">
<cfoutput><head></cfoutput>
<cfinclude template="templates/tmp_pageheader.cfm">
...
テンプレート内のvariables.someVarへのアクセスに問題があります。
質問:変数スコープ
を使用して、これはまったく可能ですか? 私が扱っている変数は実際にはそれぞれのページにのみ存在するはずなので、セッションまたはアプリケーションスコープを使用したくありません。しかし、ページ内で 1 回宣言して、テンプレート全体で参照することは可能だと思いました。変数を使用できない場合、別の方法はありますか?
編集:
まず、すべてのフィードバックに感謝します!
私がSOを使い始めた頃は、以下のような質問をすることが多かったのですが、たいていは質問をくぐり抜けて答えが得られなかったので、最小限に減らしてしまいました...残念...私も去るかもしれませんずっと離れています:-)
ですから、誰かが見たい場合は、search.cfm というページがあります。このページは、AJAX やテンプレートを介してさまざまなレイアウトを読み込むシェル ページです。特定のケースは、AJAX を介して読み込まれた検索フォームでした。
したがって、これは 3 つの部分です。
1) search.cfmここでは、Session.extern(al) でページのローカル インスタンスを確認しています。ローカル インスタンスの場合は、検索フォーム テンプレートにロードするときにアクセスすることを望んでいたユーザー変数 A、B、C を取得します。
<cfif (structKeyExists(url,"extern"))>
<!--- preload external user data --->
<cfstoredproc procedure="proc_select_extern" datasource="dtb">
<cfprocparam type="in" value="#Session.extern#" cfsqltype="cf_sql_varchar" maxlength="13">
<cfprocresult name="external_user">
</cfstoredproc>
<!--- set external variables --->
<cfif external_user.recordcount eq 1>
<cfoutput query="external_user">
<cfscript>
// CULPRIT string
variables.user_modules = external_user.modules;
</cfscript>
</cfoutput>
<cfelse>
<!--- remove unknown URL params --->
<cfset StructDelete(Session, "Extern")>
</cfif>
</cfif>
次に、私のapp.jsで ( Jquery-Mobile ) pagebeforeshow イベントをリッスンし、AJAX 経由でそれぞれのフォームをページにロードします。
$(document).on('pagebeforeshow', '#search' , function(e, data) {
// load main search form
if ( $(this).attr('val') != true ) {
$(this).attr('val') == true;
// here I'm calling the default search form
ajaxUpdate( "../layouts/tmp_searcher.cfm", $('.searchFromWrapper'), "search", "default", "search" );
}
....
var ajaxUpdate =
function update( from, target, param, account, bindings ) {
$.mobile.loading( 'show' );
$.ajax({
async: true, type: 'GET', returnFormat: 'json',
data: { value: param, type: account },
url: from, timeout: 7500,
success: function(data) {
var makeUp = !$.support.touch ? data.replace("<select", "<select data-native-menu='false' ") : data;
target.addClass('.fade.out')
.html( makeUp )
...
});
読み込まれるtmp_searcher.cfmテンプレートには、すべての検索フォームのバリエーションが含まれています。初期ロードでは、基本または外部 (userID) ベースのものを取得しています。
これは tmp_searcher.cfm の内部にあり、変数.XXX にアクセスできなくなりました... 以前の質問の URL と同じです....まあ、それを書き留めておくのは理にかなっていますが、なぜ機能しないのか ;-)
詳細は省略します。tmp_searcher.cfm の最初の行は次のとおりです。
<cfdump output="D:\ColdFusion8\logs\dump.txt" label="catch" var="#variables.user_module#">
何もダンプせず、(@Leigh) がエラーをスローします。
Element USER_MODULE is undefined in VARIABLES
だから、私の質問は次のようになっているはずです:
コンテンツが同じページにあり、Session または Application Scope を使用したくない場合、Coldfusion 変数を AJAX 呼び出しで保持する方法はありますか?