簡體   English   中英

榆樹的翻譯模式是什么?

[英]What is the translator pattern in elm?

Elm git書中 ,描述了一種體系結構,其中子組件生成消息,這些消息通過主更新功能進行傳播,最終由子組件中的適當更新功能處理。 轉換器模式與此有何不同?每種模式的用例是什么? 請提供一個簡單的例子。

只要您具有帶有update功能的嵌套“組件”,就需要確保父組件通過子Msgs和Cmds。 git書通過一個簡單的示例對此進行了概述 (此代碼在父代碼中,而Widget是子代碼):

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 )

以上將是必要的任何時候孩子有一個update的功能。 但是,在上面的示例中,父級從不知道或不在乎正在向該子級傳遞哪些子級消息。

但是現在,考慮父母需要了解孩子產生的Msg的情況。 例如:一個游戲,其中嵌套的子組件需要與父組件通信,該游戲會丟失。

當父組件需要對子更新功能返回的消息做出反應時, 翻譯器模式很有用。 這是鏈接示例中更新功能的基本結構:

GameMsg internalMsg -> 
  let
    (game_, cmd) 
       = Game.update internalMsg model.game
  in
    { model | game = game_ } ! [ Cmd.map gameTranslator cmd ]

注意,它看起來很像早期的update示例。 的主要區別在於,而不是映射Cmd直接盲父Msg ,所述單個WidgetMsg第一示例僅圍繞子傳遞的Msg ),則gameTranslator映射函數允許你映射到父消息之一。

完整閱讀《 翻譯人員模式博客》可能會有所幫助。 它是為Elm 0.17編寫的,因此對語法進行了一些更改,但總體思路仍然成立。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM