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。
欢迎解决方法。
答案 0 :(得分:2)
cfdiv绑定是对CFC的单个请求 - 状态不会在它们之间进行缓存或维护。对VARIABLES等内部共享作用域的访问在请求返回时结束。您必须手动构建/维护此状态。
步骤1:将您的CFC放在与启用SessionManagement的Application.cfc相同的目录中:
<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步:
为您的客户提供一种机制,可以跨越DIV链接'onchange'事件。它可以通过多种方式完成,但必须由您完成(这不是自动的) - 最快的出发点是参考您之前关于binding dynamic events to multiple fields的问题。
值得注意的是,使用CFC来封装像SESSION这样的范围应该小心谨慎,尽可能使用保护(即StructKeyExists(SESSION,'output')
),因为不同类型的请求(web与服务)调用共享范围的方式不同(或根本没有),您也有时间担心。