2015-12-20 22 views
4

我正嘗試使用當前日期初始化我的模型。我不想使用Native模塊。我正在嘗試使用任務和效果。我卡在我的getCurrentTime方法。什麼是最乾淨的方式?使用當前日期初始化模型

import Time exposing (Time) 
import StartApp 
import Task 
import Effects exposing (Never) 
import Html exposing (Html) 

app = 
    StartApp.start 
    { init = init 
    , view = view 
    , update = update 
    , inputs = []} 

main = 
    app.html 

port tasks : Signal (Task.Task Never()) 
port tasks = 
    app.tasks 

type alias Model = 
    { clock : Time} 

init : (Model, Effects.Effects Action) 
init = ((Model ), Effects.none) 

type Action = ShowClock 

update : Action -> Model -> (Model, Effects.Effects Action) 
update action model = 
    case action of 
    ShowClock c -> 
     ({ model | clock = c}, Effects.none) 

getCurrentTime : Effects.Effects Action 
getCurrentTime = 
    -- stuck here 
    |> Task.map ShowClock 
    |> Effects.task 

view : Signal.Address Action -> Model -> Html 
view address model = 
    Signal.map Html.text model.clock 

用「YYYY-MM-DD」格式將時間轉換爲字符串也不錯。

回答

2

有一個ELM包可在http://package.elm-lang.org/packages/evancz/task-tutorial/1.0.3/TaskTutorial你可以用來獲得當前時間。

首先,你需要下載並在終端或Windows命令使用下面的命令來更新你的榆樹的package.json文件:最後

getCurrentTime : Effects.Effects Action 
getCurrentTime = Effects.task <| Task.map ShowClock (TaskTutorial.getCurrentTime) 

elm-package install evancz/task-tutorial 1.0.3 

然後更新您的代碼,你只需要調用getCurrentTime作爲一個效果動作,你的模型將被更新。

要將時間轉換爲人類可讀的日期字符串,你可以使用這個小助手功能:因爲我做我的html在ELM,在視圖方法

toHRDate : Time -> String -- to human readable date 
toHRDate t = 
    let 
     date = Date.fromTime t 
     d = toString (Date.day date) -- day 
     m = toString (Date.month date) -- month 
     y = toString (Date.year date) -- year 
     hrd = d ++ "-" ++ m ++ "-" ++ y 
    in hrd 
1

如果我們只是想在你的程序開始傳遞一個初始值,我們可以使用一個端口:

所以,我們要補充這包含主要應用:

port time : Float 

...然後我們必須添加以下內容到我們的html中,爲我們的elm程序提供正確的初始值。

var myapp = Elm.fullscreen(Elm.YourAppNameHere, 
          { 
           time: Date.now() 
          }); 

榆樹語言網站上的互操作性文檔涵蓋了這合理連接到其他的幾個例子:http://elm-lang.org/guide/interop

或者,你可以從Signal.Extra庫,它暴露了初始值的嘗試foldp'更明確一點。 http://package.elm-lang.org/packages/Apanatshka/elm-signal-extra/5.7.0

+0

HTML部分是混淆了我。我怎麼做? – Stanko

+0

這個要點:https://gist.github.com/evancz/8456627鏈接到interop頁面,並解釋瞭如何在html中嵌入elm(全屏函數的行爲像'embed',只是它不需要目標元素,因爲它使用整個頁面作爲榆樹應用程序) – grumpyjames

+0

我不想在HTML中嵌入榆樹。必須有另一種方式,我會繼續尋找。 :) – Stanko