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 <tge...@gmail.com> 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 elm-discuss...@googlegroups.com.
>>>> 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 elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to