У меня проблема с навигацией в браузере с использованием elm. Ошибка возникает, когда я перехожу на определенную страницу / thing / sufflist , которая отображается, а затем меня переводят на путь / home . С помощью кнопки «Назад» моего браузера я могу без проблем зайти на страницу / thing / stufflist .
/ thing является главной страницей, касающейся вещи, и тогда она имеет эквиваленты вкладок в / thing / xxx
У меня настроена следующая маршрутизация с помощью elm navigation:
case routePath of
DefaultRoute ->
notFoundPage model
HomeRoute ->
homePage model
...
ThingTab id page ->
case String.toInt id of
Ok thingId ->
ThingMain.page thingId model page
Err error ->
ThingMain.page 0 model page
NotFoundRoute ->
notFoundPage model
ThingMain.page -
page : Int -> Model -> String -> Html Msg
page thingId model page =
let
maybeThing =
model.thingList
|> List.filter (\thing -> thing.id == thingId)
|> List.head
in
case maybeThing of
Just thing ->
case page of
"info" ->
thingView thing (thingInfoView thing)
"stuffs" ->
let
stuffs =
model.stuffList
|> List.filter (\stuff -> stuff.ting.id == thingId)
in
thingView thing (stuffsView stuffs)
_ ->
Error.notFoundPage model
Nothing ->
Error.notFoundPage model
Это SubsView:
stuffsView : List Stuff.Stuff -> Html Msg
stuffsView stuffs =
div [class "dialog-large"][
div [class "list"][
renderStuffList stuffs
]
]
Используйте этот метод для отображения списка:
renderStuffList : List Stuff.Stuff -> Html Msg
renderStuffList stuffs =
if List.isEmpty stuffs then
text "No stuff"
else
stuffs
|> List.map ( \stuff -> listStuff stuff )
|> ol [ class "stuff-list" ]
И подается в этот общий метод страницы:
thingView : Thing.Thing -> Html Msg -> Html Msg
thingView thing tabContent =
div [class "mr-main flex-column flex-start"][
h4 [][ text (thing.name) ]
, tabContent
,div [class "dialog-large split-choice"][
button [class "input", onClick (Msg.Navigate("thing/" ++ toString thing.id )) ][
text ("Info")
]
,button [class "input", onClick (Msg.PostAndNavigate (stuffListRequest thing.id)) ][
text ("Stuffs")
]
]
,div [class "dialog-large split-choice"][
button [class "input half-width", onClick ( Msg.Navigate("home") ) ][
text ("Home")
]
]
]
Все работает нормально во всех случаях, кроме случаев, когда на вкладке списков материалов есть пустой список. И, как уже говорилось, я могу даже вернуться назад и просмотреть мою страницу «Нет материала».
Мне все это кажется (черной) магией, и я понятия не имею, где искать?