Как инициализировать модель с помощью Window.dimensions в Elm?
В скользящей головоломке я хотел бы установить начальный размер плитки на основе начальных размеров окна (чтобы максимизировать площадь экрана).
Другими словами, я хотел бы установить initialModel
на основе начального значения Window.dimensions
,
Я не мог найти, как это сделать, и в итоге использовал порты, чтобы получить начальные размеры окна:
index.html
Elm.fullscreen(Elm.App, {
windowSize: [
document.documentElement.clientWidth,
document.documentElement.clientHeight
]
});
App.elm
port windowSize : (Int, Int)
initialModel =
-- some function of windowSize
model =
Signal.foldp update initialModel input
type Action
= WindowResize (Int, Int)
| ...
windowResize =
Signal.map WindowResize Window.dimensions
update action model =
case action of
WindowResize dimensions ->
{ model | some change based on dimensions }
...
Есть ли способ добиться того же результата без использования портов?
1 ответ
Решение
Вы можете использовать Signal.Extra.foldp' из пакета Apanatshka / elm-signal-extra для проверки исходного значения модели на основе начального значения входного сигнала.
Полное раскрытие: я автор этого пакета.