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