Good Evening Everyone! I need a little help from someone more experienced in JavaScript than I am. A row of my qx objects (a SelectBox, a Widget, and another SelectBox) are needed to be repeated on screen multiple times, and I am trying to define them using a loop. My plan is to define an array, and each element of the array will represent a row of objects. The problem I face is with the generation of the changeSelection event-handler code.
Example: var ri = 0; // arrai index var myObjectArray = []; for (ri=0; ri < 20; ri++) { myObjectArray[ri] = {}; myObjectArray[ri].Wgt = new qx.ui.core.Widget().set({width:15, height:15, backgroundColor:"white"}); myObjectArray[ri].colorSelect = new qx.ui.form.SelectBox(); myObjectArray[ri].nameSelect = new qx.ui.form.SelectBox(); // myObjectArray[ri].colorSelect.addListener("changeSelection", function(e) { myObjectArray[ri].Wgt.setBackgroundColor("blue"); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< }); // end addListener // myWindow.add(myObjectArray[ri].nameSelect, {column:0, row:ri}); myWindow.add(myObjectArray[ri].Wgt, {column:1, row:ri}); myWindow.add(myObjectArray[ri].colorSelect, {column:2, row:ri}) } // end for loop The trouble is with the line marked by <<< arrowheads. This works fine when the event-handler is defined, but fails to run properly when triggered because myObjectArray[ri].Wgt.setBackgroundColor("blue") uses a variable "ri" for the array index, which has a different value at runtime from the value at definition time. If I do it manually, 20 times, once for each myObjectArray element and use hardcoded array index values instead of a variable, then it all works fine. myObjectArray[0].colorSelect.addListener("changeSelection", function(e) { myObjectArray[0].Wgt.setBackgroundColor("blue"); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< }); // end addListener myObjectArray[1].colorSelect.addListener("changeSelection", function(e) { myObjectArray[1].Wgt.setBackgroundColor("blue"); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< }); // end addListener ... myObjectArray[19].colorSelect.addListener("changeSelection", function(e) { myObjectArray[19].Wgt.setBackgroundColor("blue"); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< }); // end addListener This is a simplified example, and my actual code is much longer. Which is why I would like to do this automated in a loop instead of adding the almost same codeblock 20 times. There are most probably ways to do it, but my JavaScript experience never had to deal with this before. So much not, that I don't even know how to name this behaviour and how to search for a solution on-line. I tried searching for "javascript variable unreferencing", "javascript variable dereferencing", even tried solving it with "eval(ri)" as the array index. No solution so far. I am happy to RTFM, just give me a pointer to the right direction, please! Regards, Keve Nagy * Debrecen * Hungary ------------------------------------------------------------------------------ Managing the Performance of Cloud-Based Applications Take advantage of what the Cloud has to offer - Avoid Common Pitfalls. Read the Whitepaper. http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk _______________________________________________ qooxdoo-devel mailing list qooxdoo-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel