Funny you mention that. I added addElementToWrapper() as a top level function 
which attaches elements to UIBases. I have just finished implementing this in 
all Basic and MDL components.

That pretty much removes the need to call super.

I’m committing my changes soon (to a branch).

> On Sep 26, 2017, at 8:41 PM, Alex Harui <aha...@adobe.com.INVALID> wrote:
> 
> IMO, the first question is, do we really need to support "new UIBase()"?
> I remember being surprised in regular Flex when folks did "new
> UIComponent()".  There aren't abstract classes in ActionScript, but I
> would have made UIComponent and UIBase abstract if I could.
> 
> But if the answer is that we want to allow "new UIBase()" and expect it to
> generate a child HTMLElement, then how do we want to instruct folks to
> write their createElement overrides?  A common override pattern is this:
> 
> public class MyClass extends UIBase {
> 
>  override protected function createElement(){
>    element = document.createElement("input");
>    super.createElement();
>  }
> }
> 
> Or this:
> 
> public class MyClass extends UIBase {
> 
>  override protected function createElement(){
>    super.createElement();
>    element = document.createElement("input");
>  }
> }
> 
> 
> Maybe the API is poorly designed. Maybe UIBase.createElement() should take
> a String and UIBase would call it with 'div' and subclasses can change the
> 'div' to something else before calling super.createElement.
> 
> Of course, I could be wrong...
> -Alex
> 
> 
> 
> On 9/26/17, 10:21 AM, "Harbs" <harbs.li...@gmail.com> wrote:
> 
>> Huh? Why would the subclass call super.createElement() and assume the
>> element will not be created?
>> 
>> FWIW, super.createElement() is barely called, and when it is (from all
>> the cases I’ve found so far in the whole Basic and MDL), it’s expecting
>> the default div element.
>> 
>>> On Sep 26, 2017, at 8:15 PM, Alex Harui <aha...@adobe.com.INVALID>
>>> wrote:
>>> 
>>> IIRC, UIBase has that code so if you do "new UIBase()" you will get an
>>> element, but if subclasses call super.createElement() by habit, we won't
>>> overwrite anybody's element.  It isn't truly PAYG, it depends on how
>>> folks
>>> feel about "requiring" that you know not to call super.createElement()
>>> on
>>> UIBase.
>>> 
>>> I don't have an opinion on what is "right".
>>> 
>>> -Alex
>>> 
>>> On 9/26/17, 8:54 AM, "Harbs" <harbs.li...@gmail.com> wrote:
>>> 
>>>> I’m working on refactoring this.
>>>> 
>>>> Is there a reason for the null check in UIBase.createElement()?
>>>> 
>>>> Why would createElement be called if the element is already created?
>>>> None
>>>> of the subclasses have this null check.
>>>> 
>>>> if (element == null)
>>>>  element = document.createElement('div') as WrappedHTMLElement;
>>>> 
>>>> Do you think it’s safe to remove the check?
>>>> 
>>>>> On Sep 26, 2017, at 6:42 PM, Alex Harui <aha...@adobe.com.INVALID>
>>>>> wrote:
>>>>> 
>>>>> I believe there are components where more than one HTMLElement is
>>>>> created
>>>>> but only one is (and can be) assigned as "element" but all have
>>>>> flexjs_wrapper assigned to the wrapping IUIBase.
>>>>> 
>>>>> If in fact no components need a separate positioner, it is fine to
>>>>> remove
>>>>> it.  But if we keep it, even as a getter returning element, we have to
>>>>> make sure our code that positions things uses positioner and not
>>>>> element
>>>>> in case someone does try to override positioner some day.
>>>>> 
>>>>> As Peter mentioned, the original thinking was that element would be
>>>>> the
>>>>> HTMLElement that defines the node in the DOM that dispatches
>>>>> interaction
>>>>> events, but positioner might be some parent of the element like a Div
>>>>> used
>>>>> to give the element appropriate visuals, chrome, accessory widgets,
>>>>> etc,
>>>>> like NumericStepper, ComboBox, DateField, and maybe more sophisticated
>>>>> components like a RichTextEditor where the "element" is a Div that
>>>>> gets
>>>>> focus and holds the text lines, but is a child of a positioner Div
>>>>> that
>>>>> also contains child buttons for bold/italic/underline.  Another
>>>>> example
>>>>> may be VideoPlayback.  The element might be some sort of video widget
>>>>> but
>>>>> the positioner might be a div that also contains child buttons for
>>>>> stop/pause/rewind/forward.
>>>>> 
>>>>> Of course, I could be wrong...
>>>>> -Alex
>>>>> 
>>>>> On 9/26/17, 6:27 AM, "Peter Ent" <p...@adobe.com.INVALID> wrote:
>>>>> 
>>>>>> @Harbs: yes on get positioner returning element. This way someone
>>>>>> could
>>>>>> override the getter and return something else if it suited their
>>>>>> needs.
>>>>>> 
>>>>>> —peter
>>>>>> 
>>>>>> On 9/26/17, 9:25 AM, "Harbs" <harbs.li...@gmail.com> wrote:
>>>>>> 
>>>>>>> I looked at MDL and I don’t see any problem there.
>>>>>>> 
>>>>>>> I’m talking about simplifying things across the board. I don’t see
>>>>>>> how it
>>>>>>> could effect anything.
>>>>>>> 
>>>>>>> @Peter I think removing positioner might not be a bad idea, but
>>>>>>> keeping
>>>>>>> it and using it as a pointer to element is basically just as cheap.
>>>>>>> 
>>>>>>>> On Sep 26, 2017, at 4:12 PM, Piotr Zarzycki
>>>>>>>> <piotrzarzyck...@gmail.com>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> Hi Harbs,
>>>>>>>> 
>>>>>>>> If you will do such changes like moving to set flexjs_wrapper in
>>>>>>>> the
>>>>>>>> setter
>>>>>>>> of element - please make it on the separate branch. Let me test
>>>>>>>> with
>>>>>>>> my
>>>>>>>> app
>>>>>>>> whether MDL will not breaking up. I hope that we could avoid this
>>>>>>>> one,
>>>>>>>> even
>>>>>>>> if I think that it seems to be quite reasonable to do that.
>>>>>>>> 
>>>>>>>> Can you for example do this only for your custom component not for
>>>>>>>> the
>>>>>>>> global IUIBase class ?
>>>>>>>> 
>>>>>>>> Let see what Peter say.
>>>>>>>> 
>>>>>>>> Thanks, Piotr
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 2017-09-26 15:02 GMT+02:00 Harbs <harbs.li...@gmail.com>:
>>>>>>>> 
>>>>>>>>> Yishay and I were working on drag/drop today and we were modifying
>>>>>>>>> one
>>>>>>>>> of
>>>>>>>>> the classes you wrote for generating the drag image.
>>>>>>>>> 
>>>>>>>>> The code can be simplified by using cloneNode() and stuffing the
>>>>>>>>> results
>>>>>>>>> into the element. The thing is, it does not work until you assign
>>>>>>>>> the
>>>>>>>>> flexjs_wrapper to the element. IMO, calling the element setter
>>>>>>>>> should
>>>>>>>>> do
>>>>>>>>> that automatically.
>>>>>>>>> 
>>>>>>>>> On a similar note, Every IUIBase object has a positioner set. I
>>>>>>>>> don’t
>>>>>>>>> know
>>>>>>>>> of a single class which has a different positioner than the
>>>>>>>>> element.
>>>>>>>>> It
>>>>>>>>> seems to me that positioner should be a getter (which normally
>>>>>>>>> returns
>>>>>>>>> the
>>>>>>>>> element) that’s overridden for classes which need a different one.
>>>>>>>>> That
>>>>>>>>> will save memory for every IUIBase created.
>>>>>>>>> 
>>>>>>>>> Harbs
>>>>>>>>> 
>>>>>>>>>> On Sep 26, 2017, at 3:23 PM, Peter Ent <p...@adobe.com.INVALID>
>>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>> The setter for element is in HTMLElementWrapper, the super class
>>>>>>>>>> for
>>>>>>>>>> UIBase. The setter for flexes_wrapper is in UIBase. So if the
>>>>>>>>>> element
>>>>>>>>>> setter were to also set the flexjs_wrapper, it would have to be
>>>>>>>>>> an
>>>>>>>>>> override in UIBase to do it. At least that¹s how I understand it.
>>>>>>>>>> 
>>>>>>>>>> Could you elaborate a little more on the issue that is raising
>>>>>>>>>> this
>>>>>>>>>> concern?
>>>>>>>>>> 
>>>>>>>>>> Your question made me scan through these classes. Looking at this
>>>>>>>>>> code
>>>>>>>>> now
>>>>>>>>>> makes me think we can do a better and more consistent job
>>>>>>>>>> organizing
>>>>>>>>>> it
>>>>>>>>>> for Royale. After all, having code that can be quickly understood
>>>>>>>>>> and
>>>>>>>>>> modified is important.
>>>>>>>>>> 
>>>>>>>>>> ‹peter
>>>>>>>>>> 
>>>>>>>>>> On 9/26/17, 7:13 AM, "Harbs" <harbs.li...@gmail.com> wrote:
>>>>>>>>>> 
>>>>>>>>>>> Currently, setting the element of a IUIBase will not work
>>>>>>>>>>> correctly
>>>>>>>>>>> because the flexjs_wrapper is not set. This makes it error prone
>>>>>>>>>>> when
>>>>>>>>>>> there¹s a need to work with the underlying DOM elements for HTML
>>>>>>>>>>> output.
>>>>>>>>>>> 
>>>>>>>>>>> I cannot think of a reason why the wrapper should not be set
>>>>>>>>>>> when
>>>>>>>>> calling
>>>>>>>>>>> the element setter. Instead of setting the flexjs_wrapper in
>>>>>>>>>>> createElement(), it seems to me that it should be set in the
>>>>>>>>>>> element
>>>>>>>>>>> setter in HTMLElementWrapper.
>>>>>>>>>>> 
>>>>>>>>>>> Anyone have a reason not to do this?
>>>>>>>>>>> 
>>>>>>>>>>> Harbs
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> -- 
>>>>>>>> 
>>>>>>>> Piotr Zarzycki
>>>>>>>> 
>>>>>>>> mobile: +48 880 859 557
>>>>>>>> skype: zarzycki10
>>>>>>>> 
>>>>>>>> LinkedIn: 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.
>>>>>>>> li
>>>>>>>> nk
>>>>>>>> e
>>>>>>>> 
>>>>>>>> 
>>>>>>>> din.com%2Fpiotrzarzycki&data=02%7C01%7C%7C6716901213624a0e804708d504
>>>>>>>> e2
>>>>>>>> 03
>>>>>>>> 9
>>>>>>>> 
>>>>>>>> 
>>>>>>>> f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636420291136295544&sd
>>>>>>>> at
>>>>>>>> a=
>>>>>>>> f
>>>>>>>> Q1CjLGkCpNKxSQBmZn%2BnKZEplQpGl25XACOqq0gO2o%3D&reserved=0
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpl
>>>>>>>> .l
>>>>>>>> in
>>>>>>>> k
>>>>>>>> 
>>>>>>>> 
>>>>>>>> edin.com%2Fin%2Fpiotr-zarzycki-92a53552&data=02%7C01%7C%7C6716901213
>>>>>>>> 62
>>>>>>>> 4a
>>>>>>>> 0
>>>>>>>> 
>>>>>>>> 
>>>>>>>> e804708d504e2039f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63642
>>>>>>>> 02
>>>>>>>> 91
>>>>>>>> 1
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 36295544&sdata=LzIej2n6WVnm9AG1Hi4NqIZjOQS%2Byo4w%2BPYTX0Rq8Gc%3D&re
>>>>>>>> se
>>>>>>>> rv
>>>>>>>> e
>>>>>>>> d=0>
>>>>>>>> 
>>>>>>>> GitHub: 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit
>>>>>>>> hu
>>>>>>>> b.
>>>>>>>> c
>>>>>>>> 
>>>>>>>> 
>>>>>>>> om%2Fpiotrzarzycki21&data=02%7C01%7C%7C6716901213624a0e804708d504e20
>>>>>>>> 39
>>>>>>>> f%
>>>>>>>> 7
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636420291136295544&sdata
>>>>>>>> =W
>>>>>>>> eI
>>>>>>>> l
>>>>>>>> LzVsJzRKniD1r9F2xb%2BwljhCLHnurBnl03kBM9E%3D&reserved=0
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
> 

Reply via email to