2015-11-09 7 views
5

In un gioco di puzzle scorrevole, vorrei impostare la dimensione iniziale della tessera in base alle dimensioni iniziali della finestra (per massimizzare lo spazio sullo schermo).Come inizializzare il modello usando Window.dimensions in Elm?

enter image description here

In altre parole, mi piacerebbe impostare initialModel sulla base del valore iniziale del Window.dimensions.

non riuscivo a trovare il modo di fare questo, e ha finito per utilizzare le porte per ottenere le dimensioni della finestra iniziale:

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 } 
    ... 

C'è un modo per ottenere lo stesso risultato senza utilizzare le porte?

risposta

3

È possibile utilizzare Signal.Extra.foldp' dal pacchetto Apanatshka/elm-signal-extra per ispezionare in base al valore iniziale del modello il valore iniziale del segnale di ingresso.

Full disclosure: Sono l'autore di quel pacchetto.

+0

Quindi posso vedere come questo mi consente di accedere al valore iniziale all'interno del secondo fn passato a foldp '. Ma non sono sicuro di cosa posso fare utilmente con quel valore per farlo entrare nel mio modello. Un piccolo esempio di codice sarebbe molto utile perché penso che mi manchi qualcosa ... –

+0

@JulianJelfs La seconda funzione ti consente di trasformare un valore iniziale in un valore del tuo modello. Quindi in quella funzione si inserisce quel valore iniziale nel modello, quindi nella funzione passo si consuma il modello normalmente. – Apanatshka

+0

OK, grazie mille per il suggerimento extra. –