I have something like

type Msg = ParentMsg Id Child.Msg

My data is in Dicts and my views look like

Dict.map \i v -> Child.view v |> Html.map (ParentMsg i)

On Wednesday, 25 May 2016 15:05:34 UTC+2, Erik Simmler wrote:

I have a rather gross implementation of what I'm hoping to achieve. I don't 
> really see a way to do this without writing Native code, which is highly 
> unfortunate: https://github.com/tgecho/elm-custom-task-example
>
> On Friday, May 20, 2016 at 2:03:42 PM UTC-4, Erik Simmler wrote:
>>
>> Thanks! ...but I don't think I explained my question very well. I'll try 
>> to come up with some sort of explanatory sample code when I have some time 
>> back at my computer, but in the meantime...
>>
>> In your sample, you're only nesting the component once. In my case I have 
>> more than one child of the same type (e.g. the nested counter/gif 
>> examples). I'm looking for a good way to return a Cmd from a child to 
>> javascript through a port, do some async work in JS and route a Msg with 
>> the result back to the same child.
>>
>> The Gif/Http/Task workflow seems to be really close to the result I want 
>> which is why I brought it up.
>>
>>
>> On Friday, May 20, 2016 at 12:57:38 PM UTC-4, Peter Damoc wrote:
>>>
>>> Keep your ports in one file and import that file throughout your 
>>> project. 
>>>
>>> Here is a gist with a simple example:
>>> https://gist.github.com/pdamoc/bf346e232ae2466923c18101122e3690
>>>
>>> download and  
>>>
>>> $ elm-make Main.elm --output elm.js
>>>
>>> agree to the install of the packages and after the elm.js is produced, 
>>> open index.html
>>>
>>> you should be able to see the classic counter and it should work as 
>>> expected with one small change, the update of the counter is done with a 
>>> round trip through JS. 
>>>
>>> The way I've set up this to work is by creating a port `toJS` where I 
>>> send String 
>>> in index.html, I check to see if the String is "Increment" and send back 
>>> through `fromJS` either +1 or -1 
>>>
>>> In Component I subscribe to `fromJS` and feed this +1 or -1 back into 
>>> the counter update. 
>>>
>>> As you can notice in Main... there is no knowledge in the parent about 
>>> what the Component is actually doing. All the parent does is map things and 
>>> pass around messages just like in any other regular Elm Architecture thing. 
>>>
>>> One last thing. Please note in Ports.elm that the Cmd and Sub you have 
>>> there are generic. 
>>>
>>> This way, the Ports.elm doesn't need to import anything. 
>>> Also, as I've demonstrated in Main.elm you can subscribe to those ports 
>>> from other parts of the App, even with different purposes. I've subscribed 
>>> in Main just to snoop on what's going on there. :) 
>>>
>>>
>>>
>>> On Fri, May 20, 2016 at 5:59 PM, Erik Simmler <[email protected]> wrote:
>>>
>>>> Does anyone have a good pattern for handling multiple nested components 
>>>> that need to communicate with JS via ports/subscriptions?
>>>>
>>>> I have a list of items, and I'm trying to allow any of these children 
>>>> to send a message through a port and receive the result back via a 
>>>> subscription. I have the outgoing port and incoming subscription wired up 
>>>> and functioning (using `Sub.batch` similarly to 
>>>> https://github.com/evancz/elm-architecture-tutorial/blob/master/nesting/4-gif-list.elm#L150),
>>>>  
>>>> but any message I get back through the port from JS land is duplicated for 
>>>> each child.
>>>>
>>>> Furthermore, I can't come up with a nice way to get them tagged and 
>>>> directly properly without moving the ports up to the containing component 
>>>> and "manually" wrapping/unwrapping the commands and messages, which seems 
>>>> like an unfortunate level of coupling.
>>>>
>>>> In the elm-architecture-tutorial repo, the Gif component requests a new 
>>>> url by returning a command created by `getRandomGif` (
>>>> https://github.com/evancz/elm-architecture-tutorial/blob/master/nesting/Gif.elm#L53).
>>>>  
>>>> In the second nesting example, the only relevant place that I can see any 
>>>> mapping occurring is the usual `Cmd.map` at 
>>>> https://github.com/evancz/elm-architecture-tutorial/blob/master/nesting/4-gif-list.elm#L93.
>>>>  
>>>> Yet, when the `FetchSucceed` comes back, it is properly wrapped in a 
>>>> `SubMsg Int` message.
>>>>
>>>> This seems to be exactly what I want, but I can't figure out how it 
>>>> works. How I can replicate this effect on my own or am I just barking up 
>>>> the wrong tree? Thanks!
>>>>
>>>> -- 
>>>> 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.
>>>>
>>>
>>>
>>>
>>> -- 
>>> There is NO FATE, we are the creators.
>>> blog: http://damoc.ro/
>>>
>> ​

-- 
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