榆树中的翻译器模式是什么?
What is the translator pattern in elm?
在 elm git book 中描述了一种体系结构,其中子组件生成消息,这些消息通过主更新功能传播,最终由子组件中的适当更新功能处理。翻译器模式与此有何不同,每种模式的用例是什么。请提供一个简单的例子。
每当你有一个带有 update
函数的嵌套 "component" 时,你需要确保 parent 通过 child 消息和命令。 git书outlines this with a simple example(这里代码在parent,而Widget
是child):
type Msg
= WidgetMsg Widget.Msg
update message model =
case message of
WidgetMsg subMsg ->
let
( updatedWidgetModel, widgetCmd ) =
Widget.update subMsg model.widgetModel
in
( { model | widgetModel = updatedWidgetModel }, Cmd.map WidgetMsg widgetCmd )
只要 child 具有 update
功能,任何 都需要以上内容。然而,在上面的示例中,parent 永远不知道或不关心什么 child 消息正在传递给 child。
但是现在,考虑 parent 需要了解 child 生成的 Msg 的情况。例如:嵌套的 child 组件需要与游戏失败的 parent 通信的游戏。
当 parent 组件需要对从 child 更新函数返回的消息作出反应时,Translator Pattern 很有用。这是链接示例中更新功能的基本结构:
GameMsg internalMsg ->
let
(game_, cmd)
= Game.update internalMsg model.game
in
{ model | game = game_ } ! [ Cmd.map gameTranslator cmd ]
请注意,它看起来很像前面的 update
示例;主要区别在于,不是将 Cmd
直接映射到盲 parent Msg
(blind 中的单个 WidgetMsg
第一个示例仅传递 child Msg
),gameTranslator
映射函数允许您映射到 parent 消息之一。
完整阅读 Translator Pattern Blog Post 可能会有帮助。它是为 Elm 0.17 编写的,因此有一些语法更改,但总体思路仍然成立。
在 elm git book 中描述了一种体系结构,其中子组件生成消息,这些消息通过主更新功能传播,最终由子组件中的适当更新功能处理。翻译器模式与此有何不同,每种模式的用例是什么。请提供一个简单的例子。
每当你有一个带有 update
函数的嵌套 "component" 时,你需要确保 parent 通过 child 消息和命令。 git书outlines this with a simple example(这里代码在parent,而Widget
是child):
type Msg
= WidgetMsg Widget.Msg
update message model =
case message of
WidgetMsg subMsg ->
let
( updatedWidgetModel, widgetCmd ) =
Widget.update subMsg model.widgetModel
in
( { model | widgetModel = updatedWidgetModel }, Cmd.map WidgetMsg widgetCmd )
只要 child 具有 update
功能,任何 都需要以上内容。然而,在上面的示例中,parent 永远不知道或不关心什么 child 消息正在传递给 child。
但是现在,考虑 parent 需要了解 child 生成的 Msg 的情况。例如:嵌套的 child 组件需要与游戏失败的 parent 通信的游戏。
当 parent 组件需要对从 child 更新函数返回的消息作出反应时,Translator Pattern 很有用。这是链接示例中更新功能的基本结构:
GameMsg internalMsg ->
let
(game_, cmd)
= Game.update internalMsg model.game
in
{ model | game = game_ } ! [ Cmd.map gameTranslator cmd ]
请注意,它看起来很像前面的 update
示例;主要区别在于,不是将 Cmd
直接映射到盲 parent Msg
(blind 中的单个 WidgetMsg
第一个示例仅传递 child Msg
),gameTranslator
映射函数允许您映射到 parent 消息之一。
完整阅读 Translator Pattern Blog Post 可能会有帮助。它是为 Elm 0.17 编写的,因此有一些语法更改,但总体思路仍然成立。