Hi Gabriel,

that "defer" approach came to my mind, too. But this will also fail,...
but different ;)

The defer "method" is called on the _class_, not on an _instance_ of it.
So this fails earlier (at start-up[2] of the application) instead of failing
when the first instance is created ;)

Nevertheless, thank you.

Cheers,
  Peter


[2] Where all the qx.Class.define("app.ContextTable",{...}); calls are
    executed.


On 2010-12-16 15:00 Gabriel Munteanu wrote:
> Hi,
> You can have a look at defer, maybe that will help you in some way:
> http://manual.qooxdoo.org/1.3/pages/core/oo_feature_summary.html
> something like this:
> defer: function(statics,members,properties){
>         members.setContextMenuHandler(0,members.__handler);
>     }
> not tested.
> 
> cheers,
> Gabi
> ________________________________________
> From: Peter Schneider [[email protected]]
> Sent: Thursday, December 16, 2010 2:12 PM
> To: qooxdoo Development
> Subject: [qooxdoo-devel] Mixin constructor should be called before 'normal'   
>   constructor
> 
> Hi there,
> 
> I strongly feel that the current order of constructor calls for mixins is
> wrong.
> I didn't want to necropost a thread by Ralf Nieuwenhuijsen[1] that is about 
> 2.5
> years old...but it basically explains the reason of this wrong behavior an I
> therefore took the liberty and "stole" his description from that thread ;)
> 
> Problem/Issue:
> ==============
>> [...]
>> The mixin constructor is called _after_ the normal constructor rather than
>> before. This is the wrong default.
>>
>> Why? Because the mixin can make no assumptions about the class it's mixed
>> in.. so it won't be calling or setting properties other than its own.
>>
>> But the class using the mixin knows its using the mixin. It wants to use the
>> mixin in the contructor, but it can't.
>> [...]
> 
> 
> Example:
> ========
> It is not possible to do this:
> 
> <code>
> qx.Class.define("app.ContextTable",
> {
>   extend  : qx.ui.table.Table,
>   include : qx.ui.table.MTableContextMenu,
> 
>   construct : function (tableModel)
>   {
>     this.base(arguments, tableModel);
>     // This *fails*, 'cause the mixins constructor was not yet called!
>     this.setContextMenuHandler(0, this.__handler, this);
>   },
> 
>   members :
>   {
>     __handler: function (col, row, table, dataModel, contextMenu) {
>       return false; // implementation stripped for clarity
>     }
>   }
> });
> </code>
> 
> 
> I think I will open a bug for this.
> 
> In the mean time, does anybody have an idea how to work around this issue with
> the current implementation?
> My current version (which I don't really like) looks like this:
> 
> <code>
> qx.Class.define("app.ContextTable",
> {
>   extend  : qx.ui.table.Table,
>   include : qx.ui.table.MTableContextMenu,
> 
>   construct : function (tableModel) {
>     this.base(arguments, tableModel);
>   },
> 
>   members :
>   {
>     /* This method _has_to_be_called_ after instantiating this Table :( */
>     initContextMenu : function ()
>     {
>       this.setContextMenuHandler(0, this.__handler, this);
>       return this; // for chaining support
>     },
> 
>     __handler: function (col, row, table, dataModel, contextMenu) {
>       return false; // implementation stripped for clarity
>     }
>   }
> });
> 
> // ... somewhere else:
>     var tableModel = new qx.ui.table.model.Simple;
>     // ...
>     var table = new app.ContextTable(tableModel).initContextMenu();
> // ...
> </code>
> 
> Thanks in advance for any hints,
>   Peter
> 
> 
> [1] http://old.nabble.com/Problems-with-Mixins-td16806052.html#a16806052

------------------------------------------------------------------------------
Lotusphere 2011
Register now for Lotusphere 2011 and learn how
to connect the dots, take your collaborative environment
to the next level, and enter the era of Social Business.
http://p.sf.net/sfu/lotusphere-d2d
_______________________________________________
qooxdoo-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel

Reply via email to