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