Passing data to a member functions that use a function












0















I have a cfc that is a service. It only has functions. Up until now did not have any member variables.



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 = "";
...


I don't like that I have to set arguments.password to variables.password just so that the function inside of .filter can see it. Isn't there a cleaner way to do this?










share|improve this question





























    0















    I have a cfc that is a service. It only has functions. Up until now did not have any member variables.



    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 = "";
    ...


    I don't like that I have to set arguments.password to variables.password just so that the function inside of .filter can see it. Isn't there a cleaner way to do this?










    share|improve this question



























      0












      0








      0








      I have a cfc that is a service. It only has functions. Up until now did not have any member variables.



      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 = "";
      ...


      I don't like that I have to set arguments.password to variables.password just so that the function inside of .filter can see it. Isn't there a cleaner way to do this?










      share|improve this question
















      I have a cfc that is a service. It only has functions. Up until now did not have any member variables.



      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 = "";
      ...


      I don't like that I have to set arguments.password to variables.password just so that the function inside of .filter can see it. Isn't there a cleaner way to do this?







      coldfusion cfml member-functions cfc coldfusion-2018






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 21 '18 at 17:17







      James A Mohler

















      asked Nov 21 '18 at 2:57









      James A MohlerJames A Mohler

      7,141123355




      7,141123355
























          1 Answer
          1






          active

          oldest

          votes


















          2














          In CF11 and newer, including Lucee 4/5, CFML closures can access variables in the parent scope (and up the stack). CF10 seems to have problems with this... but here's the code you can run in https://trycf.com to see how it works on each version of 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>


          So, in other words, you should have access to the arguments in the post() method if you're using CF11 or newer, or Lucee.






          share|improve this answer


























          • In your sample code filterTerm would have the same scope as variables.filterTerm wouldn't it?

            – James A Mohler
            Nov 21 '18 at 5:29











          • No, because the variables scope is global to your component, and the local scope is limited to the method where it's defined. Use var myLocalVar = "something"; to define a local variable inside a function, or you can also just name it local.myLocalVar = "something";

            – Redtopia
            Nov 21 '18 at 6:45






          • 1





            To clarify and provide a better test, I wrapped the original code example into a function. Note how I'm not using the scope name when referencing the argument term. This is because if you write arguments.term, you would be referencing the argument scope of the closure function.

            – Redtopia
            Nov 21 '18 at 6:51













          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53404670%2fpassing-data-to-a-member-functions-that-use-a-function%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          2














          In CF11 and newer, including Lucee 4/5, CFML closures can access variables in the parent scope (and up the stack). CF10 seems to have problems with this... but here's the code you can run in https://trycf.com to see how it works on each version of 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>


          So, in other words, you should have access to the arguments in the post() method if you're using CF11 or newer, or Lucee.






          share|improve this answer


























          • In your sample code filterTerm would have the same scope as variables.filterTerm wouldn't it?

            – James A Mohler
            Nov 21 '18 at 5:29











          • No, because the variables scope is global to your component, and the local scope is limited to the method where it's defined. Use var myLocalVar = "something"; to define a local variable inside a function, or you can also just name it local.myLocalVar = "something";

            – Redtopia
            Nov 21 '18 at 6:45






          • 1





            To clarify and provide a better test, I wrapped the original code example into a function. Note how I'm not using the scope name when referencing the argument term. This is because if you write arguments.term, you would be referencing the argument scope of the closure function.

            – Redtopia
            Nov 21 '18 at 6:51


















          2














          In CF11 and newer, including Lucee 4/5, CFML closures can access variables in the parent scope (and up the stack). CF10 seems to have problems with this... but here's the code you can run in https://trycf.com to see how it works on each version of 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>


          So, in other words, you should have access to the arguments in the post() method if you're using CF11 or newer, or Lucee.






          share|improve this answer


























          • In your sample code filterTerm would have the same scope as variables.filterTerm wouldn't it?

            – James A Mohler
            Nov 21 '18 at 5:29











          • No, because the variables scope is global to your component, and the local scope is limited to the method where it's defined. Use var myLocalVar = "something"; to define a local variable inside a function, or you can also just name it local.myLocalVar = "something";

            – Redtopia
            Nov 21 '18 at 6:45






          • 1





            To clarify and provide a better test, I wrapped the original code example into a function. Note how I'm not using the scope name when referencing the argument term. This is because if you write arguments.term, you would be referencing the argument scope of the closure function.

            – Redtopia
            Nov 21 '18 at 6:51
















          2












          2








          2







          In CF11 and newer, including Lucee 4/5, CFML closures can access variables in the parent scope (and up the stack). CF10 seems to have problems with this... but here's the code you can run in https://trycf.com to see how it works on each version of 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>


          So, in other words, you should have access to the arguments in the post() method if you're using CF11 or newer, or Lucee.






          share|improve this answer















          In CF11 and newer, including Lucee 4/5, CFML closures can access variables in the parent scope (and up the stack). CF10 seems to have problems with this... but here's the code you can run in https://trycf.com to see how it works on each version of 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>


          So, in other words, you should have access to the arguments in the post() method if you're using CF11 or newer, or Lucee.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 21 '18 at 6:50

























          answered Nov 21 '18 at 5:01









          RedtopiaRedtopia

          2,14953256




          2,14953256













          • In your sample code filterTerm would have the same scope as variables.filterTerm wouldn't it?

            – James A Mohler
            Nov 21 '18 at 5:29











          • No, because the variables scope is global to your component, and the local scope is limited to the method where it's defined. Use var myLocalVar = "something"; to define a local variable inside a function, or you can also just name it local.myLocalVar = "something";

            – Redtopia
            Nov 21 '18 at 6:45






          • 1





            To clarify and provide a better test, I wrapped the original code example into a function. Note how I'm not using the scope name when referencing the argument term. This is because if you write arguments.term, you would be referencing the argument scope of the closure function.

            – Redtopia
            Nov 21 '18 at 6:51





















          • In your sample code filterTerm would have the same scope as variables.filterTerm wouldn't it?

            – James A Mohler
            Nov 21 '18 at 5:29











          • No, because the variables scope is global to your component, and the local scope is limited to the method where it's defined. Use var myLocalVar = "something"; to define a local variable inside a function, or you can also just name it local.myLocalVar = "something";

            – Redtopia
            Nov 21 '18 at 6:45






          • 1





            To clarify and provide a better test, I wrapped the original code example into a function. Note how I'm not using the scope name when referencing the argument term. This is because if you write arguments.term, you would be referencing the argument scope of the closure function.

            – Redtopia
            Nov 21 '18 at 6:51



















          In your sample code filterTerm would have the same scope as variables.filterTerm wouldn't it?

          – James A Mohler
          Nov 21 '18 at 5:29





          In your sample code filterTerm would have the same scope as variables.filterTerm wouldn't it?

          – James A Mohler
          Nov 21 '18 at 5:29













          No, because the variables scope is global to your component, and the local scope is limited to the method where it's defined. Use var myLocalVar = "something"; to define a local variable inside a function, or you can also just name it local.myLocalVar = "something";

          – Redtopia
          Nov 21 '18 at 6:45





          No, because the variables scope is global to your component, and the local scope is limited to the method where it's defined. Use var myLocalVar = "something"; to define a local variable inside a function, or you can also just name it local.myLocalVar = "something";

          – Redtopia
          Nov 21 '18 at 6:45




          1




          1





          To clarify and provide a better test, I wrapped the original code example into a function. Note how I'm not using the scope name when referencing the argument term. This is because if you write arguments.term, you would be referencing the argument scope of the closure function.

          – Redtopia
          Nov 21 '18 at 6:51







          To clarify and provide a better test, I wrapped the original code example into a function. Note how I'm not using the scope name when referencing the argument term. This is because if you write arguments.term, you would be referencing the argument scope of the closure function.

          – Redtopia
          Nov 21 '18 at 6:51






















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53404670%2fpassing-data-to-a-member-functions-that-use-a-function%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Guess what letter conforming each word

          Port of Spain

          Run scheduled task as local user group (not BUILTIN)