我正在尝试使用当前日期初始化我的模型。我不想使用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”格式的字符串也很不错。
答案 0 :(得分:2)
http://package.elm-lang.org/packages/evancz/task-tutorial/1.0.3/TaskTutorial处有一个可用于获取当前时间的ELM包。
首先,您需要在终端或Windows命令中使用以下命令下载并更新elm-package.json文件:
elm-package install evancz/task-tutorial 1.0.3
然后更新你的代码:
getCurrentTime : Effects.Effects Action
getCurrentTime = Effects.task <| Task.map ShowClock ( TaskTutorial.getCurrentTime )
最后,您只需将getCurrentTime作为效果操作调用,您的模型将会更新。
要将您的时间转换为人类可读日期字符串,您可以使用此小帮助函数:
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 :(得分:1)
如果我们只想在程序开头传递初始值,我们可以使用端口:
因此,我们将此添加到包含 main 的应用程序中:
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