Closed dksmiffs closed 12 years ago
Today I've moved away from the "Functions as Layers" approach. I guess I was resisting the 1 shape per layer limitation, because it seemed to break the metaphor, but that's something I can live with. This is no longer a pressing issue for me, so I will close with this comment.
Okay, after examining the source, I know why you are not getting the result you want.
When I add a new function layer, I actually clone the function so no function layer is the same across multiple canvases. Unfortunately, this also means that the new function loses access to the variables it was able to access through closure.
However, if I don't clone the function, then the layer does not draw when drawn on successive canvases. That's why I clone the function in the first place.
Therefore, I'm left in a standstill. I want to clone a function, and maintain the variables it has access to. Any idea how I do that?
-Caleb
On Thu, Jun 7, 2012 at 8:37 AM, dksmiffs < reply@reply.github.com
wrote:
Caleb,
I'm using the "Functions as Layers" feature - I can live with the limitations you emailed me yesterday. However, I'm trying to figure out a way to get external variables into the callback, and the approach shown in the code below (the only one I've thought of so far) doesn't work. Please advise.
~ Dave
<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="utf-8"> <title>jCanvas outer param access test</title> </head> <body> <div id="graphics"> <canvas width="500" height="500"></canvas> </div> <script src="public/resources/jquery/jquery-1.7.2.min.js"></script> <script src="public/resources/jcanvas/jcanvas.min.js"></script> <script> $(document).ready(function() { function test(outer) { alert(outer); $("canvas").addLayer(function(ctx) { alert("This alert happens in FF 12.0 and SRWare Iron 18.0.1500.0."); // The following alert doesn't happen at all. Why? alert("Why no visibility here on " + outer + "? Is it because " + "outer has gone out of scope by the time drawLayers() is " + "called?"); }); $("canvas").drawLayers(); } test("outerValue"); }); </script> </body> </html>
Reply to this email directly or view it on GitHub: https://github.com/caleb531/jcanvas/issues/16
Never mind, I solved the issue. Apparently, I just need to create a new closure. :P
The updated code will be pushed to GitHub (by the time you read this, it should be online).
-Caleb
On Thu, Jun 7, 2012 at 4:03 PM, Caleb Evans caleb531@gmail.com wrote:
Okay, after examining the source, I know why you are not getting the result you want.
When I add a new function layer, I actually clone the function so no function layer is the same across multiple canvases. Unfortunately, this also means that the new function loses access to the variables it was able to access through closure.
However, if I don't clone the function, then the layer does not draw when drawn on successive canvases. That's why I clone the function in the first place.
Therefore, I'm left in a standstill. I want to clone a function, and maintain the variables it has access to. Any idea how I do that?
-Caleb
On Thu, Jun 7, 2012 at 8:37 AM, dksmiffs < reply@reply.github.com
wrote:
Caleb,
I'm using the "Functions as Layers" feature - I can live with the limitations you emailed me yesterday. However, I'm trying to figure out a way to get external variables into the callback, and the approach shown in the code below (the only one I've thought of so far) doesn't work. Please advise.
~ Dave
<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="utf-8"> <title>jCanvas outer param access test</title> </head> <body> <div id="graphics"> <canvas width="500" height="500"></canvas> </div> <script src="public/resources/jquery/jquery-1.7.2.min.js"></script> <script src="public/resources/jcanvas/jcanvas.min.js"></script> <script> $(document).ready(function() { function test(outer) { alert(outer); $("canvas").addLayer(function(ctx) { alert("This alert happens in FF 12.0 and SRWare Iron 18.0.1500.0."); // The following alert doesn't happen at all. Why? alert("Why no visibility here on " + outer + "? Is it because " + "outer has gone out of scope by the time drawLayers() is " + "called?"); }); $("canvas").drawLayers(); } test("outerValue"); }); </script> </body> </html>
Reply to this email directly or view it on GitHub: https://github.com/caleb531/jcanvas/issues/16
Fix works for me, thanks much.
Caleb,
I'm using the "Functions as Layers" feature - I can live with the limitations you emailed me yesterday. However, I'm trying to figure out a way to get external variables into the callback, and the approach shown in the code below (the only one I've thought of so far) doesn't work. Please advise.
~ Dave