Как инициализировать модель с помощью 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 для проверки исходного значения модели на основе начального значения входного сигнала.

Полное раскрытие: я автор этого пакета.

Другие вопросы по тегам