Elm体系结构与Elm mdl库的使用

Elm体系结构与Elm mdl库的使用,elm,Elm,在使用elm和elm mdl的单页应用程序中,让mdl组件影响页面布局的推荐方法是什么 我们是否可以将布局消息,如Model.layout.ToggleDrawer直接传递到Model.mdl(在标准设置中),如果是,如何传递 或者我们应该在模型中维护一个单独的记录元素,比如model.layout:Material.layout.model,我们将这些消息转发给它?但是在这种情况下,如何初始化视图 上下文 我正在使用elm-mdlversion8.1.0,使用elmversion0.18。我正

在使用elm和elm mdl的单页应用程序中,让mdl组件影响页面布局的推荐方法是什么

我们是否可以将布局消息,如
Model.layout.ToggleDrawer
直接传递到
Model.mdl
(在标准设置中),如果是,如何传递

或者我们应该在模型中维护一个单独的记录元素,比如
model.layout:Material.layout.model
,我们将这些消息转发给它?但是在这种情况下,如何初始化视图

上下文 我正在使用
elm-mdl
version8.1.0,使用
elm
version
0.18
。我正试图用elm和这个库为一个单页应用程序设计基本的体系结构。我从和中获得了灵感,但我没有看到我正在寻找的东西,也没有理解它是否存在

我尝试过的例子 对于可重用性,我的应用程序的主模型是唯一包含
材料的模型。模型
条目:

type alias Model = 
    { drawer : MyDrawer
    , ...
    , mdl : Material.Model
    }
在组件
MyDrawer
中,我想定义一个按钮,该按钮将发送
切换信号
。我的主
update
方法中有一个案例,它使用
Model.Layout.ToggleSignal
将此信号转发到
Model.Layout.update
方法。但是,此调用的返回类型是
Material.Layout.Model
,我自己的
模型中没有该类型

如果我定义将
布局:Material.layout.Model
添加到我自己的模型,我可以将调用转发到此元素,但如何初始化视图?到目前为止,我的看法是:

view : Model -> Html Msg
view model =
    Layout.render Mdl
        model
        [ Layout.fixedHeader
        , ...
根据
Layout.render
的签名,因为我的模型包含一个
Layout
字段,所以应该考虑这一点。我的更新方法的相关部分是

ToggleDrawer ->
    let
        ( updatedLayout, cmd ) = Material.Layout.update Material.Layout.ToggleDrawer model.layout
        ( updatedDrawer, _ ) = Drawer.update subMsg model.drawer
    in
        ( { model | drawer = updatedDrawer, layout = updatedLayout }, Cmd.map MdlLayout cmd )
然而,当点击按钮时,抽屉并没有隐藏


提前感谢您对这方面的任何帮助-图书馆和语言已经是一种很好的使用方式了

函数
Material.Layout.render
model.mdl.Layout
检索其模型,而不是从
model.Layout
检索其模型

切换抽屉的一个好方法是在
update
函数中发出合适的命令,如下所示:

ToggleDrawer -> 
    let
        ( updatedDrawer, _ ) = Drawer.update subMsg model.drawer
    in
        ( { model | drawer = updatedDrawer, layout = updatedLayout }
        , Layout.toggleDrawer Mdl
        )

谢谢你的回答!然而,这仍然不太管用
Layout.toggleDrawer Mdl
只是一个
Msg
,编译器抱怨它需要一个
Cmd Msg
。从中,我使用函数
send
将其转换为
Cmd Msg
。代码可以编译,但单击按钮不会执行任何操作。我是否也应该将
Layout.Messages
转发到Mdl布局组件,还是由
Mdl
内部完成?谢谢你的帮助