2015-11-09 5 views
5

スライドパズルゲームでは、画面の不動産を最大限にするために、最初のウィンドウのサイズに基づいて初期のタイルサイズを設定したいと思います。言い換えればElmでWindow.dimensionsを使用してモデルを初期化するには?

enter image description here

、私は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 } 
    ... 

ポートを使用せずに同じ結果を達成する方法はありますか?

答えて

3

Apanatshka/elm-signal-extraパッケージのSignal.Extra.foldp'を使用して、入力信号の初期値のモデルの初期値を検査することができます。

完全公開:私はそのパッケージの著者です。

+0

これは、foldp 'に渡された2番目のfnの内部で初期値にアクセスする方法を知ることができます。しかし、私はそれを自分のモデルに取り入れるために、その価値をどのように役立てることができるのかよくわかりません。私が何かを見逃していると思うので、小さなコードサンプルは非常に便利です。 –

+0

@JulianJelfs 2番目の関数は、初期値をモデルの値に変えることができます。その関数では、その初期値をモデルに入れてから、ステップ関数ではモデルを通常のように消費します。 – Apanatshka

+0

よろしくお願いします。 –

関連する問題