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
[email protected]
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel