Передача данных в функции-члены, которые используют функцию - PullRequest
0 голосов
/ 21 ноября 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 голосов
/ 21 ноября 2018

В 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>

Итак, другими словами,у вас должен быть доступ к аргументам в методе post (), если вы используете CF11 или новее, или Lucee.

...