使用当前日期初始化模型
Initialize model with current date
我正在尝试使用当前日期初始化我的模型。我不想使用本机模块。我正在尝试使用任务和效果来做到这一点。我被困在我的 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" 格式的字符串。
如果我们只是想在程序开始时传递一个初始值,我们可以使用一个端口:
因此,我们将其添加到包含 main:
的应用程序中
port time : Float
...然后我们必须将以下内容添加到我们的 html 中,以便为我们的 elm 程序提供正确的初始值。
var myapp = Elm.fullscreen(Elm.YourAppNameHere,
{
time: Date.now()
});
elm 语言网站上的互操作文档合理地涵盖了这一点,并提供了指向其他几个示例的链接:http://elm-lang.org/guide/interop
或者,您可以尝试 Signal.Extra 库中的 foldp'
,它会更明确地公开初始值。 http://package.elm-lang.org/packages/Apanatshka/elm-signal-extra/5.7.0
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
我正在尝试使用当前日期初始化我的模型。我不想使用本机模块。我正在尝试使用任务和效果来做到这一点。我被困在我的 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" 格式的字符串。
如果我们只是想在程序开始时传递一个初始值,我们可以使用一个端口:
因此,我们将其添加到包含 main:
的应用程序中port time : Float
...然后我们必须将以下内容添加到我们的 html 中,以便为我们的 elm 程序提供正确的初始值。
var myapp = Elm.fullscreen(Elm.YourAppNameHere,
{
time: Date.now()
});
elm 语言网站上的互操作文档合理地涵盖了这一点,并提供了指向其他几个示例的链接:http://elm-lang.org/guide/interop
或者,您可以尝试 Signal.Extra 库中的 foldp'
,它会更明确地公开初始值。 http://package.elm-lang.org/packages/Apanatshka/elm-signal-extra/5.7.0
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