Питер Боутон был почти мертв в своей концепции, но вы спросили, как писать переменные клиента, и он не тестировал свой код. Кроме того, то, что вы пытаетесь сделать, будет называться ClientFacade, поэтому я написал (и протестировал) CFC ClientFacade и сопутствующий JavaScript. Обратите внимание, что я использую jQuery, потому что я никуда не хожу без него. ;)
ClientFacade.cfc:
<cfcomponent output="false"
hint="acts as a remote facade for the client scope">
<cffunction name="set" output="false" access="remote"
returntype="boolean" hint="sets a value into the client scope">
<cfargument name="name" type="string" required="true"/>
<cfargument name="val" type="any" required="true"/>
<!--- you should sanitize input here to prevent code injection --->
<cfscript>
try {
client[arguments.name] = arguments.val;
return(true);
}catch (any e){
return(false);
}
</cfscript>
</cffunction>
<cffunction name="get" output="false" access="remote" returntype="any"
hint="gets a value from the client scope">
<cfargument name="name" type="string" required="true"/>
<cfargument name="defaultVal" type="any" required="false"
default=""/>
<!--- you should sanitize input here to prevent code injection --->
<cfscript>
if (structKeyExists(client, arguments.name)){
return(client[arguments.name]);
}else{
if (len(trim(arguments.defaultVal)) eq 0){
return('');
}else{
return(arguments.defaultVal);
}
}
</cfscript>
</cffunction>
</cfcomponent>
test.cfm:
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js">
</script>
foo:<input type="text" name="foo" id="foo"/>
<button id="setValue">Set Value</button>
<button id="alertValue">Alert Value</button>
<script type="text/javascript">
$(document).ready(function(){
//attach functionality to our alert button
$("#alertValue").click(function(e){
var clientVal = 'initialdata';
$.getJSON(
'clientFacade.cfc',
{method:"get", returnFormat:"json", name:"foo"},
function(d){
clientVal = d;
alert(clientVal);
}
);
e.preventDefault();//prevent the button from doing anything else
});
//attach functionality to our set button
$("#setValue").click(function(e){
var success = false;
var valu = $("#foo").val();
$.getJSON(
'clientFacade.cfc',
{
method:"set",
returnFormat:"json",
name:"foo",
"val":valu
},
function(d){
success = eval(d);
if (!success){
alert('Was not able to set the client var :(');
}
}
);
e.preventDefault();//prevent the button from doing anything else
});
});
</script>
Я думаю, это все, что вы хотели. Дайте мне знать, если я что-то пропустил.