Elm体系结构与Elm mdl库的使用
在使用elm和elm mdl的单页应用程序中,让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。我正
Model.layout.ToggleDrawer
直接传递到Model.mdl
(在标准设置中),如果是,如何传递
或者我们应该在模型中维护一个单独的记录元素,比如model.layout:Material.layout.model
,我们将这些消息转发给它?但是在这种情况下,如何初始化视图
上下文
我正在使用elm-mdl
version8.1.0,使用elm
version0.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
内部完成?谢谢你的帮助