¿Puedo acceder a un conjunto de variables en una página de Coldfusion en una plantilla que estoy cargando, si no estoy usando el alcance de la sesión?

Tengo una página de Coldfusion8, en la que declaro algunas variables por adelantado, así:

<cfif (structKeyExists(url,"extern"))>
    <cfset variables.someVar = "value">
<cfelse>
    <cfset variables.someVar = "">
</cfif>

Después de esto, tengo una serie de plantillas, que estoy cargando:

<cfinclude template="templates/tmp_pagetop.cfm">
<cfoutput><head></cfoutput>
<cfinclude template="templates/tmp_pageheader.cfm">
... 

Tengo problemas para acceder a mi variables.algunaVar dentro de mi plantilla.

Pregunta:
¿Es esto posible usando el las variables ¿alcance? no quiero usar Sesión or solicitud scope, porque las variables con las que estoy tratando en realidad solo deberían existir en la página respectiva. Pero pensé que sería posible declarar una vez en la página y hacer referencia a todas las plantillas. Si no puedo usar variables, ¿hay otra forma?

EDIT:
En primer lugar, ¡gracias por todos los comentarios!

Cuando comencé a usar SO, generalmente planteaba preguntas como las siguientes, pero terminé reduciéndolas al mínimo, ya que generalmente no obtenía una respuesta a las preguntas exhaustivas... lástima... Supongo que también me iré. muy lejos :-)

Entonces, si alguien quiere echar un vistazo, tengo una página llamada search.cfm. Esta página es una página de shell en la que estoy cargando diferentes diseños a través de AJAX y/o plantillas. El caso específico fue el formulario de búsqueda cargado a través de AJAX.

Entonces esto son 3 partes:

1) buscar.cfm Aquí estoy revisando Session.extern(al) para instancias locales de la página. Si se trata de una instancia local, tomo las variables A, B, C de los usuarios a las que esperaba acceder al cargar en la plantilla del formulario de búsqueda.

<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>

Entonces en mi aplicación.js estoy escuchando el (Jquery-Móvil) pagebeforeshow event y cargue el formulario respectivo en la página a través de 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 ) 
                        ...
                });

La tmp_buscador.cfm la plantilla que se está cargando contiene todas las variantes del formulario de búsqueda. En la carga inicial, estoy tomando el básico o externo (ID de usuario).

Está dentro de tmp_searcher.cfm, donde no puedo acceder variables.XXX más... igual que la URL de mi pregunta anterior... Bueno, escribirlo tiene sentido, por qué no funciona ;-)

Le ahorro los detalles, la primera línea en tmp_searcher.cfm es:

<cfdump output="D:\ColdFusion8\logs\dump.txt" label="catch" var="#variables.user_module#">

Que no arroja nada y (@Leigh) arroja un error:

Element USER_MODULE is undefined in VARIABLES

Entonces, mi pregunta debería haber sido:

¿Hay alguna forma de que las variables de Coldfusion persistan a través de llamadas AJAX, si el contenido está en la misma página y no quiero usar el ámbito de sesión o aplicación?

preguntado el 12 de junio de 12 a las 18:06

No lo tome a mal, pero realmente debe comenzar a incluir mensajes de error con sus preguntas (o una descripción de los resultados incorrectos). Porque no está del todo claro qué significa "tener problemas" :) -

@Leigh - Está bien. Próxima pregunta ;-) -

No hay tiempo como el presente: P Por cierto, técnicamente lo que describiste debería funcionar como está. Las plantillas incluidas tienen acceso a la variables ámbito de la página de llamada. Si no, parece que está sucediendo algo más que no sabemos :) -

¿Dónde estás configurando las variables? Si su primer fragmento está dentro de Application.cfc, entonces está accediendo al ámbito variable de CFC, no al de la página. En su lugar, utilice el ámbito Solicitud. -

espera, veo tu código ahora... esperas obtener una variable en una solicitud completamente diferente. Cuando llama a $.ajax, es una solicitud completamente nueva... no se introduce nada de su página actual ni de ninguna otra página. No sabe nada más que está siendo llamado. Es casi como abrirlo en una nueva ventana del navegador por sí mismo. Si tmp_searcher.cfm necesita saber algo, debe pasarlo a través de POST o url vars. -

1 Respuestas

Puede utilizar el alcance de la solicitud. Eso le permitirá acceder a cualquier variable en la solicitud, incluidas las plantillas.

Pero la forma en que solía hacerlo era usar cfimport con un prefijo como ... "ui"

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

Luego dentro de tu plantilla tienes acceso a attributes.heyLookAVar

Puede ser realmente elegante y detectar si la etiqueta de llamada de la plantilla está terminando o comenzando... entonces solo necesita una

<ui:page>
   my page
</ui:page>

Respondido el 12 de junio de 12 a las 18:06

ah así que request.someVar? Frio. ¡No sabía eso! ¡GRACIAS! - frecuente

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.