This is the same issue. My checkin, revision 7680, should fix both. No performance problem. Internally this fancy stuff is all based around the native prototype chain :)
Sebastian Christian Boulanger schrieb: > Hello Sebastian, > > great, thanks! If it was also possible to implement the inheritance of the > mixin properties, this would be fabulous. Then I could get rid of all the > manual mixins to all the classes where I need it. Or does this pose a > performance problem? > > Best, > > Christian > > >> Hi Christian, >> >> thank you for your feedback and your former work. Really appreciated. >> This seems to be a bug inside our property system. Each class remembers >> if the properties have been attached to a class. This way we reduce the >> overhead at class instantiation. However this makes it currently >> impossible to adding properties to classes which have at least one >> instance. I will try to fix this ASAP. >> >> Cheers, >> >> Sebastian >> >> >> >> Christian Boulanger schrieb: >>> OK - I found it out - maybe obvious, but wasn't for me: >>> >>> qx.Class.include() needs to be called BEFORE the class is instantiated >>> for the first time. The problem in my code was that the classes had been >>> used previously. >>> >>> So what I gathered is that the property system of qooxdoo is >>> FUNDAMENTALLY different from the normal javascript prototype-based >>> property inheritance, and that mixins at runtime are much more complex >>> that simply attaching methods to the prototype. >>> >>> I hope I'll have the time to write a short notice on this in the wiki. >>> >>> Cheers, >>> >>> Christian >>> >>> Christian Boulanger schrieb: >>>> Very very strange behaviour: >>>> >>>> var log= qx.log.Logger.ROOT_LOGGER; >>>> log.setMinLevel(qx.log.Logger.LEVEL_ALL); >>>> >>>> qx.Class.include(qx.ui.basic.Atom,qx.io.databinding.MDataManager); >>>> qx.Class.include(qx.ui.basic.Label,qx.io.databinding.MDataManager); >>>> qx.Class.include(qx.ui.form.List,qx.io.databinding.MDataManager); >>>> >>>> qx.Class.include(qx.ui.form.TextField,qx.io.databinding.MDataManager); >>>> >>>> var at = new qx.ui.basic.Atom; >>>> var la = new qx.ui.basic.Label; >>>> var li = new qx.ui.form.List; >>>> var tf = new qx.ui.form.TextField; >>>> >>>> log.info ("qx.ui.basic.Atom.getDataBinding: " + >>>> at.getDataBinding); >>>> log.info ("qx.ui.basic.Label.getDataBinding: " + >>>> la.getDataBinding); >>>> log.info ("qx.ui.form.List.getDataBinding: " + >>>> li.getDataBinding); >>>> log.info ("qx.ui.form.TextField.getDataBinding: " + >>>> tf.getDataBinding); >>>> >>>> >>>> INFO: root: qx.ui.basic.Atom.getDataBinding: undefined >>>> INFO: root: qx.ui.basic.Label.getDataBinding: undefined >>>> INFO: root: qx.ui.form.List.getDataBinding: function () { return >>>> qx.core.Property.executeOptimizedGetter(this, clazz, name, "get"); } >>>> INFO: root: qx.ui.form.TextField.getDataBinding: undefined >>>> >>>> So the mixin seems to "stick" only to the qx.ui.form.List, but to none >>>> of the other classes. Does anyone have an explanation? >>>> >>>> Christian >>>> >>>> >>>> >>>> Christian Boulanger schrieb: >>>> >>>>> Very interesting: >>>>> >>>>> qx.Class.include(qx.ui.form.List,qx.io.databinding.MDataManager); >>>>> >>>>> qx.Class.include(qx.ui.basic.Label,qx.io.databinding.MDataManager); >>>>> >>>>> var li = new qx.ui.form.List; >>>>> var la = new qx.ui.basic.Label; >>>>> >>>>> qx.core.Log.error ("qx.ui.form.List.getDataBinding: " + >>>>> li.getDataBinding); >>>>> qx.core.Log.error ("qx.ui.basic.Label.getDataBinding: " + >>>>> la.getDataBinding); >>>>> >>>>> results in: >>>>> >>>>> qx.ui.form.List.getDataBinding: function () { return >>>>> qx.core.Property.executeOptimizedGetter(this, clazz, name, "get"); } >>>>> qx.ui.basic.Label.getDataBinding: undefined >>>>> >>>>> this looks very sophisticated! However, why is >>>>> qx.ui.basic.Label.getDataBinding undefined when >>>>> qx.ui.form.List.getDataBinding has been correctly set? >>>>> >>>>> C. >>>>> >>>>> >>>>> Christian Boulanger schrieb: >>>>> >>>>> >>>>>> Here is something I don't understand: >>>>>> >>>>>> qx.Class.include(qx.ui.form.List,qx.io.databinding.MDataManager); >>>>>> for (var i in qx.ui.form.List) >>>>>> qx.core.Log.error(i + ": " + qx.ui.form.List[i]); >>>>>> >>>>>> I get the following list: >>>>>> >>>>>> $$original: function () { <snip/>} >>>>>> classname: qx.ui.form.List >>>>>> name: anonymous >>>>>> basename: List >>>>>> toString: function () { return "[Class " + this.classname + "]"; } >>>>>> prototype: [object qx.ui.form.List] >>>>>> superclass: [Class qx.ui.layout.VerticalBoxLayout] >>>>>> constructor: [Class qx.ui.form.List] >>>>>> $$destructor: function () { this._disposeObjects("_manager"); } >>>>>> $$properties: [object Object] >>>>>> $$includes: [Mixin qx.io.databinding.MDataManager] >>>>>> $$flatIncludes: [Mixin qx.io.databinding.MDataManager] >>>>>> >>>>>> I am always amazed and surprised once I dive into the internals of >>>>>> qooxdoo... where are all the getter and setter methods here? why >>>>>> don't >>>>>> they show up if I do a "for (.. in..)" loop? >>>>>> >>>>>> C. >>>>>> >>>>>> >>>>>> Christian Boulanger schrieb: >>>>>> >>>>>> >>>>>> >>>>>>> Any ideas about this problem? At the moment I am not even getting >>>>>>> the >>>>>>> first option working, so everything might be a problem of my code. >>>>>>> Has >>>>>>> anyone else ever combined mixins and inheritance? Thanks, C. >>>>>>> >>>>>>> Christian Boulanger schrieb: >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>>> if I am including the mixin like so: >>>>>>>> >>>>>>>> >>>>>>>> qx.Class.include(qx.ui.basic.Label,qx.io.databinding.MDataManager); >>>>>>>> >>>>>>>> everything works. However, trying to achieve the same with >>>>>>>> >>>>>>>> >>>>>>>> qx.Class.include(qx.core.Target,qx.io.databinding.MDataManager); >>>>>>>> >>>>>>>> fails. It seems I have to manually include the mixin into each >>>>>>>> class I >>>>>>>> want to use it with. >>>>>>>> >>>>>>>> No messages in the debug log. >>>>>>>> >>>>>>>> It would be great if this could be fixed. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> >>>>>>>> Christian >>>>>>>> >>>>>>>> >>>>>>>> >>>>> ------------------------------------------------------------------------- >>>>> This SF.net email is sponsored by DB2 Express >>>>> Download DB2 Express C - the FREE version of DB2 express and take >>>>> control of your XML. No limits. Just data. Click to get it now. >>>>> http://sourceforge.net/powerbar/db2/ >>>>> _______________________________________________ >>>>> qooxdoo-devel mailing list >>>>> qooxdoo-devel@lists.sourceforge.net >>>>> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel >>>>> >>>>> >>>> ------------------------------------------------------------------------- >>>> This SF.net email is sponsored by DB2 Express >>>> Download DB2 Express C - the FREE version of DB2 express and take >>>> control of your XML. No limits. Just data. Click to get it now. >>>> http://sourceforge.net/powerbar/db2/ >>>> _______________________________________________ >>>> qooxdoo-devel mailing list >>>> qooxdoo-devel@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel >>>> >>> >>> ------------------------------------------------------------------------- >>> This SF.net email is sponsored by DB2 Express >>> Download DB2 Express C - the FREE version of DB2 express and take >>> control of your XML. No limits. Just data. Click to get it now. >>> http://sourceforge.net/powerbar/db2/ >>> _______________________________________________ >>> qooxdoo-devel mailing list >>> qooxdoo-devel@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel >> >> ------------------------------------------------------------------------- >> This SF.net email is sponsored by DB2 Express >> Download DB2 Express C - the FREE version of DB2 express and take >> control of your XML. No limits. Just data. Click to get it now. >> http://sourceforge.net/powerbar/db2/ >> _______________________________________________ >> qooxdoo-devel mailing list >> qooxdoo-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel >> > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > qooxdoo-devel mailing list > qooxdoo-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ qooxdoo-devel mailing list qooxdoo-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel