Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web 如何在elm中发送消息(无事件)_Web_Routing_Frontend_Elm_Messages - Fatal编程技术网

Web 如何在elm中发送消息(无事件)

Web 如何在elm中发送消息(无事件),web,routing,frontend,elm,messages,Web,Routing,Frontend,Elm,Messages,我正在努力学习Elm,并且一直在努力找出构建可伸缩应用程序的最佳方法。关于路由,我希望有一些简单的逻辑,根据当前的路由呈现各种视图,重点是简单的逻辑。但是,在我的一些视图中,我希望根据模型更改路线。例如,在我的Players视图中,我只想在从服务器收到一些数据时渲染它。如果请求挂起或失败,我想显示一个错误页面。我意识到我可以在Players视图中执行此逻辑,但我更愿意向模型发送一条消息,将路由更改为不同的视图。我只知道如何从事件中发送消息(onClick,等等)。这是可能的,还是我在语言设计之外

我正在努力学习Elm,并且一直在努力找出构建可伸缩应用程序的最佳方法。关于路由,我希望有一些简单的逻辑,根据当前的
路由
呈现各种视图,重点是简单的逻辑。但是,在我的一些视图中,我希望根据模型更改路线。例如,在我的
Players
视图中,我只想在从服务器收到一些数据时渲染它。如果请求挂起或失败,我想显示一个错误页面。我意识到我可以在
Players
视图中执行此逻辑,但我更愿意向模型发送一条消息,将路由更改为不同的视图。我只知道如何从事件中发送消息(
onClick
,等等)。这是可能的,还是我在语言设计之外工作

这是我当前的设置,但我想更改

Nothing ->
    notFoundView
发送更改路由的消息的步骤

核心视图

view : Model -> Html Msg
view model =
    div []
        [ page model
        ]

page : Model -> Html Msg
page model =
    case model.route of
        PlayersRoute ->
            listView model.playersModel.players

        PlayerRoute id ->
            editView model id

        NotFoundRoute ->
            notFoundView
editView : Model -> PlayerId -> Html Msg
editView model id =
    case model.playersModel.players of
        NotAsked ->
            text ""

        Loading ->
            text "Loading ..."

        Failure err ->
            text (toString err)

        Success players ->
            let
                maybePlayer =
                    players
                        |> List.filter(\player -> player.id == id)
                        |> List.head
            in
                case maybePlayer of
                    Just player ->
                        core player

                    Nothing ->
                        notFoundView
玩家视图

view : Model -> Html Msg
view model =
    div []
        [ page model
        ]

page : Model -> Html Msg
page model =
    case model.route of
        PlayersRoute ->
            listView model.playersModel.players

        PlayerRoute id ->
            editView model id

        NotFoundRoute ->
            notFoundView
editView : Model -> PlayerId -> Html Msg
editView model id =
    case model.playersModel.players of
        NotAsked ->
            text ""

        Loading ->
            text "Loading ..."

        Failure err ->
            text (toString err)

        Success players ->
            let
                maybePlayer =
                    players
                        |> List.filter(\player -> player.id == id)
                        |> List.head
            in
                case maybePlayer of
                    Just player ->
                        core player

                    Nothing ->
                        notFoundView

提前感谢您的帮助

在将消息传递到编辑视图之前,可以匹配子模型的内容,并查看是否存在错误路由。因此,核心
页面
函数如下所示

page : Model -> Html Msg
page model =
    case model.route of
        PlayersRoute ->
            listView model.playersModel.players

        PlayerRoute id ->
            case model.playersModel.players of
                Failure err ->
                    errorView err

                _ ->
                    editView model id

        NotFoundRoute ->
            notFoundView

另一种选择是使用完整路线,并使用导航包。但是,这将涉及为每个页面设置路由的开销。您将能够发送Cmd来更改应用程序顶层的页面。将导致呈现完全不同的页面。

谢谢!很抱歉反应太晚,我希望避免这种情况,但我从未找到解决办法,所以这是我见过的最好的折衷办法