榆树:在模型更新后,将当前时间作为效果传递给Tick Action

时间:2016-06-18 01:54:48

标签: elm

update我希望每次调用Tick时都调用Input动作。

方案是用户在文本字段中输入值,在更新时,模型通过Input更新,然后调用Tick并在模型上执行更多内容。

在0.16我可以这样做:

Input query ->
  ({ model | query = query }, Effects.tick Tick)

Tick clockTime ->
  -- do something with clockTime

我不确定如何在0.17中执行此操作。

我不确定这是否是subscription,如果是,你怎么能配置它来调用Input然后Action。

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

Task下的Time模块中,用于检索作为效果的当前时间的功能已移至Time.now

http://package.elm-lang.org/packages/elm-lang/core/4.0.1/Time#now

您可以通过进行以下更改来重现您的功能:

1)确保邮件中有NoOp条消息。 Time.now会返回一个我们知道永远不会失败的Task,但我们仍然需要将失败的消息发送给Task.perform

type Msg
  = Input String
  | Tick Time
  | NoOp

2)将Effects.tick Tick替换为Time.nowTask.perform

Input query ->
  ( { model | query = query }
  , Time.now |> Task.perform (\_ -> NoOp) Tick
  )

如果您不喜欢NoOp消息,则还有其他方法,例如使用Debug.crash中的performFailproofTask.Extra(可在此处找到: http://package.elm-lang.org/packages/NoRedInk/elm-task-extra/2.0.0/Task-Extra#performFailproof