Passing data to a member functions that use a function
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
add a comment |
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
add a comment |
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
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
coldfusion cfml member-functions cfc coldfusion-2018
edited Nov 21 at 17:17
asked Nov 21 at 2:57
James A Mohler
7,098123252
7,098123252
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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.
In your sample codefilterTerm
would have the same scope asvariables.filterTerm
wouldn't it?
– James A Mohler
Nov 21 at 5:29
No, because thevariables scope
is global to your component, and thelocal scope
is limited to the method where it's defined. Usevar myLocalVar = "something";
to define a local variable inside a function, or you can also just name itlocal.myLocalVar = "something";
– Redtopia
Nov 21 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 argumentterm
. This is because if you writearguments.term
, you would be referencing the argument scope of the closure function.
– Redtopia
Nov 21 at 6:51
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
In your sample codefilterTerm
would have the same scope asvariables.filterTerm
wouldn't it?
– James A Mohler
Nov 21 at 5:29
No, because thevariables scope
is global to your component, and thelocal scope
is limited to the method where it's defined. Usevar myLocalVar = "something";
to define a local variable inside a function, or you can also just name itlocal.myLocalVar = "something";
– Redtopia
Nov 21 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 argumentterm
. This is because if you writearguments.term
, you would be referencing the argument scope of the closure function.
– Redtopia
Nov 21 at 6:51
add a comment |
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.
In your sample codefilterTerm
would have the same scope asvariables.filterTerm
wouldn't it?
– James A Mohler
Nov 21 at 5:29
No, because thevariables scope
is global to your component, and thelocal scope
is limited to the method where it's defined. Usevar myLocalVar = "something";
to define a local variable inside a function, or you can also just name itlocal.myLocalVar = "something";
– Redtopia
Nov 21 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 argumentterm
. This is because if you writearguments.term
, you would be referencing the argument scope of the closure function.
– Redtopia
Nov 21 at 6:51
add a comment |
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.
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.
edited Nov 21 at 6:50
answered Nov 21 at 5:01
Redtopia
2,03053156
2,03053156
In your sample codefilterTerm
would have the same scope asvariables.filterTerm
wouldn't it?
– James A Mohler
Nov 21 at 5:29
No, because thevariables scope
is global to your component, and thelocal scope
is limited to the method where it's defined. Usevar myLocalVar = "something";
to define a local variable inside a function, or you can also just name itlocal.myLocalVar = "something";
– Redtopia
Nov 21 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 argumentterm
. This is because if you writearguments.term
, you would be referencing the argument scope of the closure function.
– Redtopia
Nov 21 at 6:51
add a comment |
In your sample codefilterTerm
would have the same scope asvariables.filterTerm
wouldn't it?
– James A Mohler
Nov 21 at 5:29
No, because thevariables scope
is global to your component, and thelocal scope
is limited to the method where it's defined. Usevar myLocalVar = "something";
to define a local variable inside a function, or you can also just name itlocal.myLocalVar = "something";
– Redtopia
Nov 21 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 argumentterm
. This is because if you writearguments.term
, you would be referencing the argument scope of the closure function.
– Redtopia
Nov 21 at 6:51
In your sample code
filterTerm
would have the same scope as variables.filterTerm
wouldn't it?– James A Mohler
Nov 21 at 5:29
In your sample code
filterTerm
would have the same scope as variables.filterTerm
wouldn't it?– James A Mohler
Nov 21 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 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 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 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 at 6:51
add a comment |
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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