如何使用 Elm.Html 创建特定的 DOM 结构?

How to create a specific DOM structure with Elm.Html?

人, 我正在尝试学习一些 Elm,并从教程(下面)中获取经典的 app-pattern。我想创建一个具有页眉(呃)、body 和页脚的视图。我看到 elm.Html 包含一个 header (和页脚)函数,所以我尝试将它添加到视图函数中(如下)。我相信我需要创建自己的节点 ("t"),它具有 DOM 个元素(header 和 div)。

module App exposing (..)

import Html exposing (Html, node, header, div, text, program)

type Msg = NoOp

init =
    ("Hello", Cmd.none)


view model =
    node "t" [][header[][], div [][text "test"]]

update msg model =
    case msg of
        NoOp -> (model, Cmd.none)

subscriptions model = Sub.none

main =
    program
    { init = init
    , view = view
    , update = update
    , subscriptions = subscriptions
    }

当我在客户端查看 DOM 时,它具有以下结构;

<html><head></head><body><t><header></header><div>test</div></t></body></html>

所以我的视图函数 returns 内容似乎在 body-tags 内。那么我怎样才能创建一个具有这种结构的视图呢? <html><header></header><body><div>test</div></body><footer></footer></html>

Elm.Html 不提供对 DOM(HTML 节点)的根的访问。相反,你给它一个节点作为它的根(通常是 DIV)。因此,考虑到您的示例,您必须在 HTML 文件中创建 HTML、HEADER、BODY 和顶级 DIV 节点。然后 Elm 可以从那里拿走它。

view model =
    text "test"

但是这样的事情很常见:

view model =
    div [] [ text "test" ]

这会产生:<html><header></header><body><div><div>test</div></div></body><footer></footer></html>