将数据传递给使用函数的成员函数
Passing data to a member functions that use a function
我有一个作为服务的 cfc。它只有功能。到目前为止还没有任何成员变量。
login.cfc
function post(required string email, required string password) {
...
variables.password = arguments.password; // wish I didn't have to do this
var User = entityLoad("Users", {email : arguments.email}).filter(
function(item){
return item.validatePassword(variables.password);
});
variables.password = "";
...
我不喜欢我必须将 arguments.password
设置为 variables.password
,这样 .filter
中的函数才能看到它。没有更简洁的方法吗?
在 CF11 和更新版本中,包括 Lucee 4/5,CFML 闭包可以访问父作用域(以及堆栈)中的变量。 CF10 似乎在这方面有问题...但是您可以在 https://trycf.com 中 运行 查看它在每个版本的 ColdFusion 上如何工作的代码:
<cfscript>
function doFilter(term) {
var superheroes=[
{"name":"Iron Man","member":"Avengers"},
{"name":"Wonder Woman","member":"Justice League"},
{"name":"Hulk","member":"Avengers"},
{"name":"Thor","member":"Avengers"},
{"name":"Aquaman","member":"Justice League"}
];
var filtered=superheroes.filter(function(item){
return item.member==term;
});
writeDump(filtered);
}
doFilter("Avengers");
</cfscript>
因此,换句话说,如果您使用的是 CF11 或更新版本,或者 Lucee,您应该可以访问 post() 方法中的参数。
我有一个作为服务的 cfc。它只有功能。到目前为止还没有任何成员变量。
login.cfc
function post(required string email, required string password) {
...
variables.password = arguments.password; // wish I didn't have to do this
var User = entityLoad("Users", {email : arguments.email}).filter(
function(item){
return item.validatePassword(variables.password);
});
variables.password = "";
...
我不喜欢我必须将 arguments.password
设置为 variables.password
,这样 .filter
中的函数才能看到它。没有更简洁的方法吗?
在 CF11 和更新版本中,包括 Lucee 4/5,CFML 闭包可以访问父作用域(以及堆栈)中的变量。 CF10 似乎在这方面有问题...但是您可以在 https://trycf.com 中 运行 查看它在每个版本的 ColdFusion 上如何工作的代码:
<cfscript>
function doFilter(term) {
var superheroes=[
{"name":"Iron Man","member":"Avengers"},
{"name":"Wonder Woman","member":"Justice League"},
{"name":"Hulk","member":"Avengers"},
{"name":"Thor","member":"Avengers"},
{"name":"Aquaman","member":"Justice League"}
];
var filtered=superheroes.filter(function(item){
return item.member==term;
});
writeDump(filtered);
}
doFilter("Avengers");
</cfscript>
因此,换句话说,如果您使用的是 CF11 或更新版本,或者 Lucee,您应该可以访问 post() 方法中的参数。