Могу ли я получить доступ к набору переменных на странице Coldfusion в загружаемом шаблоне, если не использую область сеанса?

У меня есть страница 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">
... 

У меня проблемы с доступом к моим переменным.someVar внутри моего шаблона.

Вопрос:
Возможно ли это вообще с помощью области видимости переменных? Я не хочу использовать сессию или область приложения, потому что переменные, с которыми я имею дело, должны существовать только на соответствующей странице. Но я подумал, что можно будет объявить один раз на странице и ссылаться на шаблоны. Если я не могу использовать переменные, есть ли другой способ?

РЕДАКТИРОВАТЬ:
Прежде всего, спасибо за все отзывы!

Когда я начинал использовать 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, где я больше не могу получить доступ к переменным. ХХХ... так же, как 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

Итак, мой вопрос должен был быть:

Есть ли способ, чтобы переменные Coldfusion сохранялись через вызовы AJAX, если содержимое находится на той же странице, и я не хочу использовать Session или Application Scope?

1 ответ

Решение

Вы можете использовать область запроса. Это позволит вам получить доступ к любым переменным в запросе, включая шаблоны.

Но я использовал для этого cfimport с префиксом вроде "ui"

<cfimport taglib="templates" prefix="ui">
<ui:tmp_pagetop heyLookAVar="#myvar# >

Тогда внутри вашего шаблона у вас есть доступ к attributes.heyLookAVar

Вы можете действительно придумать и определить, заканчивается ли тег вызова шаблона шаблоном или начинается... тогда вам нужен только один

<ui:page>
   my page
</ui:page>
Другие вопросы по тегам