2015-11-09 19 views
5

Sürgülü bir bulmaca oyununda, ilk pencere boyutlarına göre (başlangıçta ekran gayrimenkulünü en üst düzeye çıkarmak için) ilk karo boyutunu ayarlamak istiyorum. Diğer bir deyişle,Elm Window.dimensions kullanarak modeli nasıl başlatılır?

enter image description here

, I Window.dimensions başlangıç ​​değerine göre initialModel ayarlamak istiyorum.

ben bunun nasıl bulmak ve ilk pencere boyutlarını almak için bağlantı noktalarını kullanarak sona erdi olamazdı:

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

Bağlantı noktası kullanmadan aynı sonucu elde etmenin bir yolu var mı?

cevap

3

Signal.Extra.foldp' ürününü, Apanatshka/elm-signal-extra paketinden kullanarak modelin başlangıç ​​değerini giriş sinyalinin başlangıç ​​değerine göre kontrol edebilirsiniz.

Tam açıklama: Ben bu paketin yazarıyım.

+0

Bu yüzden, bunun, katlamadan geçen ikinci fn içindeki başlangıç ​​değerine erişmemi nasıl sağladığını görebiliyorum. Ama modelime almam için bu değerle ne yapmam gerektiğini bilemiyorum. Küçük bir kod örneği çok yararlı olacaktır çünkü sanırım bir şeyleri özlüyorum ... –

+0

@JulianJelfs İkinci işlev, bir başlangıç ​​değerini modelinizin bir değerine dönüştürmenize izin verir. Yani bu fonksiyonda bu başlangıç ​​değerini modele koyarsınız, o zaman adım fonksiyonunda modeli sadece normal olarak tüketirsiniz. – Apanatshka

+0

Tamam, ekstra ipucu için çok teşekkürler. –

İlgili konular