假设我想创建一个包含两个组件的网页,比如 aNavbar
和 a Body
。这两个组件互不交互,可以独立开发。所以,我有两个 elm 文件,每个文件都包含以下组件:
type Model = ...
type Msg = ...
init : (Model, Cmd Msg)
update : Msg -> Model -> (Model, Cmd Msg)
view : Model -> Html Msg
假设它们都工作正常,我们如何组合它们来制作一个同时具有这两个组件的程序?
我试着写这样的东西:
type Model = {body : Body.Model , navbar : Navbar.Model}
type Msg = BodyMsg Body.Msg | NavbarMsg Navbar.Msg
view : Model -> Html Msg
view model = div [] [Body.view model.body, Navbar.view model.navbar]
update : Msg -> Model -> (Model, Cmd Msg)
update = ...
当我尝试编写这个更新函数时,上面的内容很快变得很难看。特别是,一旦我从Navbar.update
or中提取出 Cmd 的更新函数中的 Msg Body.update
,我如何提取它们并将它们再次反馈给这些函数?此外,上面的视图函数看起来并不特别地道。
解决此问题的 elm-architecture 推荐方法是什么?这种模式在 elm-architecture 中是惯用的吗?