I tried your application on Iceweasel. The checkboxes never get checked, 
but opening the Javascript console I can see the messages are getting 
through:

"Main: SelectChanged (Dict.fromList [("1","one"),("2","two")])" 
wood.js:907:2
"_itemsChanged : newValue = 1,one,2,two,3,three, oldValue = 
1,one,2,two,3,three"

It looks like Mdl messages are not coming through. The checkboxes are 
rendered correctly (mdl-style), just not checked.


On Tuesday, March 28, 2017 at 12:15:35 PM UTC+2, Rupert Smith wrote:
>
> On Tuesday, March 28, 2017 at 10:21:02 AM UTC+1, Rupert Smith wrote:
>>
>> On Tuesday, March 28, 2017 at 7:26:37 AM UTC+1, Charles-Edouard Cady 
>> wrote:
>>>
>>> (2) the ability to write webcomponents in Elm.
>>>
>>> I'm not too sure about number 2: what I've seen in the list so far is 
>>> mainly interest in using webcomponents but not so much in writing them. 
>>> Does anybody have more information on this? Any help would be greatly 
>>> appreciated!
>>>
>>
>> I have implemented a list box as a webcomponent in Elm (and consumed it 
>> in Elm too). I'll see what state it is currently in and get back to you. 
>> But first, coffee... 
>>
>
> Here it is, freshly upgraded to Elm 0.18:
>
> https://github.com/rupertlssmith/wood-polymer 
>
> I gave my Elm Polymer components based on Polymer 'paper' the name 'wood'. 
> Because wood is related to paper and Elm is wood.
>
> The main files of interest are:
>
>
> https://github.com/rupertlssmith/wood-polymer/blob/master/src/elm/Listbox/Listbox.elm
>
> https://github.com/rupertlssmith/wood-polymer/blob/master/src/webcomponents/wood-listbox.html
>
> You can see how the web component is initialized by passing a property 
> (the 'items' function builds this property).
>
> You can see how the web component triggers an event in elm by using a 
> property change event handler.
>
> You can see where I make use of the Polymer life-cycle to attach Elm into 
> the Dom in the attached() method.
>
> One thing that turned out strange with this is that to make use of 
> Polymers automatic ability to notify on changed properties, I had to keep a 
> copy of the list box state on the javascript side. I also have its state on 
> the Elm side in the Model. This is rather unfortunate, as you can see 
> various ports and subscriptions that are need to keep the two sides in 
> sync. This feature of Polymer is convenient for working with it in 
> javascript, but not for Elm.
>
> The Polymer component would also tend to fire off _itemsChanged, when the 
> items have not changed. So you can see I tried to filter out some of these 
> spurious firings with arrays equal tests.
>
> I used Polymer as a convenient way of getting started with web components, 
> but I think perhaps it is the wrong library. Really Elm needs some support 
> for web components added to it that is better attuned to how Elm works. My 
> suggestion is a new Program type in Elm, that helps you build an Elm 
> Program-as-webcomponent. However, to begin with we just figure out how to 
> code Elm webcomponents by hand then figure out what bits of that can be 
> extracted as helper code to be incorporated into Elm :-)
>
> Also important, configure Polymer with these settings in index.html:
>
>     <script>
>         window.Polymer = {
>             dom: 'shadow',
>             lazyRegister: true
>         };
>     </script>
>
> =======
>
> For your application, how much interaction is there between the web 
> components and the main page? I expect from your description that the 
> components are fairly self-contained - I think this makes them a reasonable 
> candidate for implementing as web components within Elm.
>
> The one problem you may have is if the Elm managed virtual DOM decides to 
> re-render your webcomponent, it will be re-initialized and lose its 
> internal state. This may not be so much of a problem. The situation where 
> it may occur is if you have a list of these components within some div and 
> you add another one and the whole div is re-rendered. Html.Keyed will help 
> you out here.
>
>
> =======
>
> Peter says you may find dynamically importing the components tricky? I 
> don't think it will be so hard, as you can always import the necessary 
> stuff inline in the Html body, you don't need to declare all imports 
> up-front in the head.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to