在SPA中初始化UI的推荐做法是什么?

时间:2017-11-06 12:56:46

标签: elm

我正在努力弄清楚如何将数据加载到动态生成的视图中。

因此,如何在我的视图上触发 update 功能,以便可以使用Web请求的数据进行初始化。

以下是视图的呈现方式:

case portal.requested of
    Domain.ViewSources ->
        div []
            [ Html.map SourcesUpdated <|
                Sources.view
                    { profileId = portal.provider.profile.id
                    , platforms = model.platforms
                    , source = portal.newSource
                    , sources = loggedIn.profile.sources
                    , isInitialized = False
                    }
            ]

详细信息:

我尝试将以下内容添加到我的主页面,该主页面调用了 view 功能:

main =
    Html.program
        { init = ( init, Cmd.none )
        , view = view
        , update = update
        , subscriptions = (\_ -> Sub.none)
        }

过去,模块的更新功能会在键输入和按钮点击事件时触发。但是,现在我需要从过去的用户会话中加载数据。因此,当用户首次查看页面时,我很难触发 update 功能。

这就是我想做的事情:

update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
    if not model.isInitialized then
        ( model, runtime.sources model.source.profileId SourcesResponse )
    else ...

这是code

2 个答案:

答案 0 :(得分:1)

你应该利用init函数采用包含初始Command的元组的面,其结果传递给更新函数

main =
    Html.program
        { init = ( init, runtime.sources init.source.profileId SourcesResponse )
        , view = view
        , update = update
        , subscriptions = (\_ -> Sub.none)
        }

答案 1 :(得分:0)

我了解到我可以简单地将状态传递给我的视图功能。

div []
    [ Html.map SourcesUpdated <|
        Sources.view
            { ...
            , sources = loggedIn.profile.sources
            }
    ]

因此,我陷入了使用OOP执行app UX的 PageLoaded 范例。

因此,在上面的示例中,我使客户端模块负责初始化其他模块的视图需要呈现的数据。