将数据传递给使用函数的成员函数

时间:2018-11-21 02:57:55

标签: coldfusion cfml member-functions cfc coldfusion-2018

我有一个作为服务的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内部的函数可以看到它。没有更干净的方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:2)

在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()方法中的参数。