Thank you, Peter. You've described a nice solution.
The problem I'm having, though is that when I try to send Child2.someMsg the
compiler tells me that `Child2` does not expose `someMsg`. I am, however
exposing it in the module shown in the code below.
How does one create a Msg to then send to Child2? It appears that even
though it's exposed it's not recognized in the parent module.
Relevant code:
module Child2 exposing (Msg, Model, view, update, model)
...
-- Msg Union Type Definition Child2
type Msg =
SomeMsg
| NoOp
On Monday, May 30, 2016 at 1:22:26 AM UTC-5, Peter Damoc wrote:
>
> You have multiple ways to address this, depending on the role or the ID.
>
> If the ID is just an identifier of the child, it should not be in the
> child because it has nothing to do with the child functionality. It should
> be in the parent, similar to the way CounterList is implemented in the
> tutorial. Once it is in the parent, your problem becomes very simple since
> you will have access to the ID in the parent `update`
>
> If, for some reason, you need to keep the id inside the child, you can
> expose an interrogation API on the model
>
> case of msg
> UpdateFromChild1 msg ->
> let
> newChild1 = Child1.update msg model.child1
> id = Child1.id model.child1
> c2msg = Child2.someMsgForId id
> newChild2 = Child2.update c2msg model.child2
> in
> { model | child1 = newChild1, child2 = newChild2 }
>
> And in Child1.elm have
>
> id model = model.id
>
> in Child2.elm have
>
> someMsgForId id = SomeMsg id
>
> Approaching things like this ensure that you are not needlessly coupling
> Child1 and Child2 code.
>
>
>
>
>
>
> On Mon, May 30, 2016 at 4:06 AM, David <[email protected] <javascript:>
> > wrote:
>
>> Hi,
>>
>> I'm new at this too and just experimenting. The model structured is
>> presented below. I don't think it has much to do with the model, but more
>> to do with the fact that the update in Child2 is expecting a Child2.Msg,
>> but is instead receiving a Child1.Msg.
>>
>> Model Child2
>> ---
>> model =
>> { id: Int
>> , name: String
>> , description: String
>> }
>>
>>
>>
>> On Sunday, May 29, 2016 at 4:12:59 PM UTC-5, Witold Szczerba wrote:
>>>
>>> Hi,
>>> I am just experimenting with Elm, haven't done anything yet, so I will
>>> be watching how this thread evolves. Looking at your case, I have but one
>>> question: what's the model of the component you have problem with?
>>>
>>> Regards,
>>> Witold Szczerba
>>> 29 maj 2016 21:06 "David" <[email protected]> napisał(a):
>>>
>>> I need to update 2 child components based on the Action/Msg of 1 child
>>> component. How would I do this?
>>>
>>> The UpdateFromChild1 contains a Child1.Msg, which contains an id. I'd
>>> like to send the id to the models of Child1 update *and* to Child2
>>> update.
>>>
>>> Code:
>>>
>>> Main update
>>> ---
>>> update msg model =
>>> case of msg
>>> UpdateFromChild1 msg ->
>>> Child1.update msg Child1.model <---- works, update gets correct
>>> message with id
>>> Child2.update *msg* Child2.model <---- does not work, obviously
>>> ^---------------------- somehow change this to
>>> (Child2.Msg id)?
>>> UpdateFromChild2 msg ->
>>> -- stuff only child 2 cares about
>>>
>>>
>>>
>>> Main view
>>> ---
>>> view model =
>>> div []
>>> [ App.map UpdateFromChild1 (Child1.view Child1.model)
>>> , App.map UpdateFromChild2 (Child2.view Child2.model)
>>> ]
>>>
>>> --
>>> 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.
>>>
>>> --
>> 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] <javascript:>.
>> 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.