Hi Alex,

I think the purpose is to have a positioner different to element so
createElement creates element as normal, but positioner is not element. Or
maybe I missing something. To what do you think it should be assigned?


El jue., 7 mar. 2019 a las 4:59, Alex Harui (<[email protected]>)
escribió:

> I don't think I see element being assigned in this example.
>
> -Alex
>
> On 3/6/19, 3:09 PM, "Carlos Rovira" <[email protected]> wrote:
>
>     Hi ,
>
>     If I remove positioner = element in StyleUIBase and then in Jewel
>     TextInputBase add
>
>     COMPILE::JS
>     private var _div:HTMLDivElement = null;
>
>     COMPILE::JS
>             public function get div():HTMLDivElement
>             {
>     if(_div == null)
>     _div = document.createElement('div') as HTMLDivElement;
>     return _div;
>     }
>
>     COMPILE::JS
>             override public function get positioner():WrappedHTMLElement
>             {
>     return div as WrappedHTMLElement;
>             }
>
>     And Jewel TextInput has
>
>     COMPILE::JS
>     override protected function createElement():WrappedHTMLElement
>     {
>     input = addElementToWrapper(this,'input') as HTMLInputElement;
>     input.setAttribute('type', 'text');
>     goog.events.listen(input, 'input', textChangeHandler);
>     div.appendChild(input);
>     return element;
>     }
>
>     I get:
>
>     *Uncaught TypeError: Failed to execute 'appendChild' on 'Node':
> parameter 1
>     is not of type 'Node'.*
>     *    at
>     org.apache.royale.jewel.View.org.apache.royale.core.UIBase.addElement
>     (UIBase.js:413)*
>     *    at
>
> org.apache.royale.jewel.View.org.apache.royale.core.GroupBase.addElement
>     (GroupBase.js:165)*
>     *    at
>
> Function.org.apache.royale.utils.MXMLDataInterpreter.initializeStrandBasedObject
>     (MXMLDataInterpreter.js:236)*
>     *    at
>     Function.org.apache.royale.utils.MXMLDataInterpreter.generateMXMLArray
>     (MXMLDataInterpreter.js:125)*
>     *    at
>
> Function.org.apache.royale.utils.MXMLDataInterpreter.generateMXMLInstances
>     (MXMLDataInterpreter.js:266)*
>     *    at org.apache.royale.jewel.View.addedToParent (View.js:69)*
>     *    at
>
> BE0004_Adding_an_item_to_a_Jewel_List.org.apache.royale.jewel.Application.addElement
>     (Application.js:144)*
>     *    at
>
> BE0004_Adding_an_item_to_a_Jewel_List.org.apache.royale.jewel.Application.initialize
>     (Application.js:295)*
>     *    at
>
> BE0004_Adding_an_item_to_a_Jewel_List.org.apache.royale.jewel.Application.start
>     (Application.js:264)*
>     *    at index.html:196*
>
>     The problem seems to be in UIBase.js:413
>
>     /**
>      *  @copy org.apache.royale.core.IParent#addElement()
>      *
>      *  @langversion 3.0
>      *  @playerversion Flash 10.2
>      *  @playerversion AIR 2.6
>      *  @productversion Royale 0.0
>      *  @royaleignorecoercion org.apache.royale.core.IUIBase
>      * @export
>      * @param {org.apache.royale.core.IChild} c
>      * @param {boolean=} dispatchEvent
>      */
>     org.apache.royale.core.UIBase.prototype.addElement = function(c,
>     dispatchEvent) {
>       dispatchEvent = typeof dispatchEvent !== 'undefined' ? dispatchEvent
> :
>     true;
>
>     *  this.element.appendChild(c.positioner);  //---------------------
> this
>     line*
>       c.addedToParent();
>     };
>
>
>     El mié., 6 mar. 2019 a las 14:35, Harbs (<[email protected]>)
> escribió:
>
>     > That’s surprising to me too.
>     >
>     > All you should need to do for separate positioners is to override the
>     > positioned getter.
>     >
>     > > On Mar 5, 2019, at 11:50 PM, Alex Harui <[email protected]>
>     > wrote:
>     > >
>     > > Hi Carlos,
>     > >
>     > > I'm not sure I understood the question, mainly because I'm
> surprised
>     > that setting position=element in a base class would require the same
> code
>     > in the subclasses.
>     > >
>     > > There is both a positioner and element variables because some early
>     > components were a tree of HTMLElements and the one you set positional
>     > styles on (left, right, top, bottom, width, height) might need to be
>     > different from the element that is listened to for events and may be
> the
>     > element that has the CSS "id" assigned to it and/or is the element
> that is
>     > referenced in accessibility.
>     > >
>     > > In many cases, positioner == element.
>     > >
>     > > I think you have to set positioner in createElement.  But there
> could
>     > certainly be some issue with the lifecycle.  Maybe the runtime error
> and
>     > call stack provides a clue.
>     > >
>     > > -Alex
>     > >
>     > > On 3/5/19, 3:44 PM, "Carlos Rovira" <[email protected]
> <mailto:
>     > [email protected]>> wrote:
>     > >
>     > >    Hi Alex,
>     > >
>     > >    many time ago to make possible make heavy use of styles easily,
> I
>     > created
>     > >    StyledUIBase that in part composed ClassSelectorList
>     > >    that uses "positioner". That's because jewel components use to
> be
>     > wrapped
>     > >    in other divs or similar to be able to draw it better and get
> the
>     > right
>     > >    look and feel.
>     > >
>     > >    I had to make put in StyledUIBase.createElement this line
>     > >
>     > >    positioner = element;
>     > >
>     > >    to avoid an error at runtime
>     > >
>     > >    This make me have to add this line in almost all Jewel
> Components
>     > >
>     > >    I'm looking at this now with a bit more time to see how I can
> remove
>     > this.
>     > >
>     > >    I'm starting from an example with just a button or just a label
> and
>     > trying
>     > >    to clean without luck
>     > >
>     > >    If I left StyledUIBase without code and just extend UIBase
> still I
>     > found an
>     > >    error at runtime.
>     > >
>     > >    Maybe is too late here and I must close now, but just want to
> know if
>     > you
>     > >    have some clue about what I need to do that just looking to
>     > StyledUIbase
>     > >    and Jewel Label or Jewel UIBase createElement.
>     > >
>     > >    If you have some clue, I can take a look tomorrow and see if I
> can
>     > finally
>     > >    understand what's happening with positioner.
>     > >
>     > >    Thanks
>     > >
>     > >    --
>     > >    Carlos Rovira
>     > >
>     >
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7Cf911b783caaf463fae9f08d6a288bfad%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636875105543285303&amp;sdata=Kp89sNrlizhybiKTptBz0LgQ9UqA5Kydxv59VC3rTEY%3D&amp;reserved=0
>     > <
>     >
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7Cf911b783caaf463fae9f08d6a288bfad%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636875105543285303&amp;sdata=Kp89sNrlizhybiKTptBz0LgQ9UqA5Kydxv59VC3rTEY%3D&amp;reserved=0
>     > >
>     >
>
>
>     --
>     Carlos Rovira
>
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7Cf911b783caaf463fae9f08d6a288bfad%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636875105543295308&amp;sdata=nIDnXvzQ8T1CENU0f78nNjrqIH9u4HBe2SYD%2Fw3Dxh0%3D&amp;reserved=0
>
>
>

-- 
Carlos Rovira
http://about.me/carlosrovira

Reply via email to