Могу ли я получить доступ к набору переменных на странице 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>