I already figured it out, thanks Just map children's msg to parent's msg on children's html events, so the children's view return same Msg type as parent's, that's how to use `TabMsg` inside `Tab.view`
On Sun, May 22, 2016 at 1:34 AM, Nick H <[email protected]> wrote: > Can you show us your Tab.view code? > > Changing the type signature in the manner I suggested will require changes > to the function. It will be easier to explain if I can see what you have > right now. > > On Wed, May 18, 2016 at 7:12 PM, Luis Fei <[email protected]> wrote: > >> Thanks,Nick,sorry for the later reply >> >> I tried to apply the changes to Tab.view, still have the problem, this >> time the compiler complained inferring definition has this type: `(Msg -> >> a) -> Model -> List (Html Msg) -> Html Msg`, and I'm confused how to use >> this new added TabMsg parameter inside Tab.view >> >> On Wednesday, May 18, 2016 at 12:36:35 AM UTC+8, Nick H wrote: >>> >>> Right now, I am guessing your Tab.view has this signature: >>> >>> Tab.view : Tab.Model -> List (Html Tab.Msg) -> Html Tab.Msg >>> >>> Try changing it to follow this signature: >>> >>> Tab.view : (Tab.Msg -> a) -> Tab.Model -> List (Html a) -> Html a >>> >>> And your Main.view will then look like this: >>> >>> view model = >>> Tab.view TabMsg model.tabModel >>> [ App.map LogsMsg <| LogList.view model.logModel ] >>> >>> >>> The other solution that comes to mind would be to nest the LogList.Model >>> within Tab.Model and nest LogList.Msg within Tab.Msg, but I am guessing you >>> want the Tab component to be more generic than that. >>> >>> On Tue, May 17, 2016 at 3:26 AM, Luis Fei <[email protected]> wrote: >>> >>>> Hi, I was trying to upgrade from 0.16 to 0.17, and meet this problem >>>> >>>> I have a Main.view which contains a Tab.view, and Tab.view contains a >>>> LogList.view, so i change the Signal.forwardTo part like this: >>>> >>>> -- This is Main module >>>> >>>> type alias Model = >>>> { tabModel : Tab.Model >>>> , logsModel : LogList.Model >>>> } >>>> >>>> type Msg >>>> = TabMsg Tab.Msg >>>> | LogMsg LogList.Msg >>>> >>>> view : Model -> Html Msg >>>> view model = >>>> App.map TabMsg >>>> <| Tab.view model.tabModel >>>> [ App.map LogsMsg <| LogList.view model.logModel ] >>>> >>>> >>>> And the compiler complained as the Tab.view is expecting `List (Html >>>> Tab.Msg)` but it is `List (Html Msg)`, I understand why the compiler >>>> complain like this, the problem is I don't know how to do these kind of >>>> multi-level nesting. >>>> >>>> thanks. >>>> >>>> BTW, I read >>>> https://github.com/evancz/elm-architecture-tutorial/blob/master/nesting/2-counter-list.elm, >>>> but it's single child to parent communication. >>>> >>>> -- >>>> 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]. >> For more options, visit https://groups.google.com/d/optout. >> > > -- > You received this message because you are subscribed to a topic in the > Google Groups "Elm Discuss" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/elm-discuss/yzaZXYKXDvI/unsubscribe. > To unsubscribe from this group and all its topics, 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]. For more options, visit https://groups.google.com/d/optout.
