5
スライドパズルゲームでは、画面の不動産を最大限にするために、最初のウィンドウのサイズに基づいて初期のタイルサイズを設定したいと思います。言い換えればElmでWindow.dimensionsを使用してモデルを初期化するには?
、私はWindow.dimensions
の初期値に基づいてinitialModel
を設定したいと思います。
私はこれを行う方法を見つけて、初期ウィンドウのサイズを取得するためにポートを使用して終了できませんでした:
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 }
...
ポートを使用せずに同じ結果を達成する方法はありますか?
これは、foldp 'に渡された2番目のfnの内部で初期値にアクセスする方法を知ることができます。しかし、私はそれを自分のモデルに取り入れるために、その価値をどのように役立てることができるのかよくわかりません。私が何かを見逃していると思うので、小さなコードサンプルは非常に便利です。 –
@JulianJelfs 2番目の関数は、初期値をモデルの値に変えることができます。その関数では、その初期値をモデルに入れてから、ステップ関数ではモデルを通常のように消費します。 – Apanatshka
よろしくお願いします。 –