I change the code to be
button.addListener("execute", currentDesc['cde'], currentDesc['ctx']);
without defining locally a var listener = function() { ...
currentDesc['cde'] ...}
it works ... but I don't understand the fundamental difference betwwen
with and without listener function...
Any light out there ?
On 23 Mar 2009, at 17:36, Jean-Baptiste BRIAUD -- Novlog wrote:
> Hi,
>
> I come into a tricky javascript issue with a listener.
> The idea is to have a description of several buttons like this :
>
> [{lbl:"OK", cde:okFunction, ctx:this}, {lbl:"Cancel",
> cde:cancelFunction, ctx:this}]
>
> Then, a static function is called to build the panel and listeners
> like that :
>
> f : function(currentDesc) {
> var buttonPane = new qx.ui.container.Composite(new
> qx.ui.layout.HBox(5, "right"));
> for (var i = 0, buttonDescLength = buttonDesc.length; i <
> buttonDescLength; i++) {
> var button = new qx.ui.form.Button(buttonDesc[i]
> ['lbl']);
> var currentDesc = buttonDesc[i];
> var listenerCode = function() {
> button.debug("Button " + currentDesc['lbl'] +
> " CLICK ! code " + currentDesc['cde']);
> if (currentDesc['cde'] != null &&
> currentDesc['ctx'] != null) {
>
> currentDesc['cde'].call(currentDesc['ctx']);
> }
> };
> button.addListener("execute", listenerCode,
> button); // I try here with and without context as I think it doesn't
> matter in this case because of the use of call.
> buttonPane.add(button);
> }
> }
>
> Whatever I try, it is always the cancel button code that is launched
> in the listener.
> I guess it is linked to some closure and variable that are not stored
> in the closure's context : currentDesc['cde'] doesn't "stick" to the
> okFunction during the loop ??
>
> Could it be the static ? Only the factory is static, so the definition
> line is just pass as a parameter to the static function.
> Like that : blabla.f([{lbl:"OK", cde:okFunction, ctx:this},
> {lbl:"Cancel", cde:cancelFunction, ctx:this}]); // So here, ctx:this
> make sense.
>
> Any idea ?
>
> ------------------------------------------------------------------------------
> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM)
> are
> powering Web 2.0 with engaging, cross-platform capabilities. Quickly
> and
> easily build your RIAs with Flex Builder, the Eclipse(TM)based
> development
> software that enables intelligent coding and step-through debugging.
> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
> _______________________________________________
> qooxdoo-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
>
------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
qooxdoo-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel