Elm let's you do that and you can definitely treat functions as just data.
That being said, I would advise against it. Keep your Models as pure data
types.
If you imagine dividing your code in three sections: Model, Update and
View, keep all your transformations and all your Cmd related stuff in
Update.
You can add another parameter to update:
-- UPDATE
doThis : Model -> Cmd Msg
doThis = doThisStuff
doThat : Model -> Cmd Msg
doThat = doThatStuff
doNothing : Model -> Cmd Msg
doNothing = always Cmd.none
update : (Model -> Cmd Msg) -> Msg -> Model -> (Model, Cmd Msg)
update cmd msg model =
case msg of
SomeMsg ->
let
newModel = someRelevantUpdating model
in
newModel ! [cmd newModel]
and call it in the parent like
newChild = Child.update Child.doThis childMsg model.child
Of course, if you have more than one command you can use a Context record
to keep the commands .
type alias Context =
{ primary : Model -> Cmd Msg
, secondary : Model -> Cmd Msg
}
update : Context -> Msg -> Model -> (Model, Cmd Msg)
update ctx msg model =
case msg of
SomeMsg ->
let
newModel = someRelevantUpdating model
in
newModel ! [ctx.primary model]
Just keep you Models and Views as simple and as free from processing as
possible.
On Mon, Jun 13, 2016 at 12:09 PM, 诺铁 <[email protected]> wrote:
> for example, in the http example
> <https://github.com/evancz/elm-architecture-tutorial/blob/master/examples/5-http.elm>,
> the
>>
>> getRandomGif : String -> Cmd Msg
>
> can be sent to init function as a parameter, then call this parameter
> function in the update function, this might make it easier to test update
> function, and totally separate the component from the program.
>
> --
> 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.