A solution I am currently experimenting with is to wrap the Msg of each
component into a union type:
type AddressedMsg =
ToSelf Msg
| ToParent OutMsg
| ToRoot RootMsg
All relevant functions of the component which output ( Model, Cmd Msg ) change
to ( Model, Cmd AddressedMsg )
The update function (of any component in the tree) is now:
update : AddressedMsg -> Model -> ( Model, AdressedMsg )
update msg model =
case msg of
ToSelf msg' ->
handleMsg msg' model
ToParent outMsg ->
-- translate outMsg to new message for parent
Inside the view, I bundled my taggers to include the address, e.g. 'ToSelf
Increment' to increase counter 'ToParent RemoveMe' to notify parent counter
needs to be removed.
Inside parent's update function is similar and the confidentiality is
preserved. Whenever the parent of this component is called (e.g Modify 5 msg in
case of the counter).
When the Msg is of type ToSelf, then the parent calls the update of the child.
--
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.