Я новичок в Elm
, вероятно, неправильное понимание архитектуры и это может быть XY вопрос (но я не знаю еще ...)SPA Динамическая маршрутизация и Page Rendering
В любом случае, я пытаясь создать URL-адрес в Elm. Я использую evancz/start-app
для создания индивидуальных динамических страниц с использованием elm-achitecture-tutorial example 1 в качестве отправной точки для каждой «страницы»:
Frontend.Pages.Home.display : Signal Html
Frontend.Pages.Home.display = StartApp.start
{ model = 0
, update = update
, view = view
}
type alias Model = Int
type Action = Increment | Decrement
update : Action -> Model -> Model
update action model =
case action of
Increment -> model + 1
Decrement -> model - 1
view : Signal.Address Action -> Model -> Html
view address model =
div []
[ button [ onClick address Decrement ] [ text "-" ]
, div [ countStyle ] [ text (toString model) ]
, button [ onClick address Increment ] [ text "+" ]
]
Я использую TheSeamau5/elm-router
для
route : String -> Signal Html
route = Router.match
[ "/" :-> Frontend.Pages.Home.display
] Frontend.Pages.Errors.FourOhFour.display
Я использую TheSeamau5/elm-history
собрать последнюю URL :
main : Signal Html.Html
main = Frontend.Routes.route History.path
Очевидно, что это ошибка; Я передаю Signal String
в метод, который принимает String
. Проблема заключается в том, что если я использую следующее:
main = Signal.map Frontend.Routes.route History.path
, который я ожидал бы Signal.map Frontend.Routes.route History.path
быть типа Signal Html
, а компилятор жалуется на конфликт:
The type annotation for `main` does not match its definition.
7| main : Signal Html.Html
^^^^^^^^^^^^^^^^ As I infer the type of values flowing through your program, I see a conflict between these two types:
Html.Html
Signal Html.Html
- Что здесь происходит? Похоже, что Signal.Map «распаковывает»
Signal Html
. Это так?
кажется мой основной вопрос, во всяком случае, это: Как я могу представить одностраничный-приложение, направляется на отдельные реактивные «страницы» на основе Signal String
пока не реализовав Router
?
Заранее спасибо.
Извините, я не могу попробовать то, что вы сейчас говорите, но так я понимаю, я бы изменил подпись маршрута на 'route: String -> Html'? Не будет ли это просто перенаправить ошибку типа на функцию маршрута? «Frontend.Pages.Home.display: Signal Html» не может измениться, так как я пытаюсь расширить учебник по инфраструктуре (это выглядит так: http://elm-lang.org/examples/buttons), кроме make это СПА. Разве это не связано с удалением части StartApp MVU? Разве это не разрушает интерактивность на уровне модели, за исключением изменения URL-адреса? –
Вы правы. Функция 'display' должна возвращать только' Html'. Если я правильно понимаю, 'display' реализуется с помощью' StartApp.start', который создает 'Signal.Html', который вы возвращаете. Это верно? – Joe
Это правильно. –