Как я могу связать CFD с CFC, который поддерживает состояние? - PullRequest
0 голосов
/ 07 октября 2011

CFM

<html>

<head>

<title>Test Page</title>

</head>

<body>

    <cfform>
        <cfinput type="text" name="input">
    </cfform>

    <cfscript>
        calc = CreateObject("component", "TestCFC");
    </cfscript>

    <cfdiv bind="cfc:TestCFC.func({input})"></cfdiv>
    <cfdiv bind="cfc:TestCFC.func2()"></cfdiv>


</body>
</html>

CFC

<cfcomponent>
    <cfscript>
        this.output = '';

        remote function func(input){
            output = input;
            return output;  
        }
        remote function func2(){
            return output & ' Hello World.';    
        }
    </cfscript>
</cfcomponent>

Введите:

Первые слова:

Ожидаемый результат

Первые слова:

Первые слова: Hello World.

Обходные пути приветствуются.

1 Ответ

2 голосов
/ 07 октября 2011

привязки cfdiv - это отдельные запросы к CFC - состояние не кэшируется и не поддерживается между ними.Доступ к внутренним общим областям, таким как VARIABLES, заканчивается при возврате запроса.Вы должны создать / поддерживать это состояние вручную.

Шаг 1: Поместите свой CFC в тот же каталог, что и Application.cfc, который включает SessionManagement:

<cfset this.sessionManagement = true />
<cfset this.sessionTimeout = createTimeSpan(0,20,0,0) />

Шаг 2: Измените свой CFC такчто предполагаемая переменная, которая будет сохраняться между каждым отдельным запросом, находится в области SESSION:

<cfcomponent>

    <cfset session.output = '' />

Шаг 3. Напишите свои функции так, чтобы вы читали / записывали эту область с состоянием:

    remote function func(input){
        session.output = arguments.input;
        return session.output;
    }

Шаг 4:

Придумайте, как ваш клиент может связать события onchange между DIV.Это может быть сделано любым количеством способов, но это должно быть сделано вами (это не автоматически). Самая быстрая отправная точка - обратиться к вашему предыдущему вопросу о привязке динамических событий к нескольким полям .

Стоит отметить, что использование CFC для обертывания области, подобной SESSION, должно быть абсолютно осторожным, используйте по возможности защиту (т. Е. StructKeyExists(SESSION,'output')), поскольку различные типы запросов (веб-служба или служба) вызывают общий доступ.по-разному (или не полностью), и у вас также есть время ожидания для беспокойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...