在应用程序首次启动时Elm,特别是使用Elm Architecture,该init函数可以返回Cmd Msg执行的函数.我们可以使用它来发送http请求或通过Elm端口向本机Javascript发送消息.
我的问题是,如何发送应该执行的多个命令init?
例如,我可以做类似的事情:
init : (Model, Cmd Msg)
init =
(Model "" [], (Ports.messageToJs "Hello JS"))
Run Code Online (Sandbox Code Playgroud)
我可以这样做:
url : String
url =
"http://some-api-url.com"
...
fetchCmd : Cmd Msg
fetchCmd =
Task.perform FetchError FetchSuccess fetchTask
init : (Model, Cmd Msg)
init =
(Model "" [], fetchCmd)
Run Code Online (Sandbox Code Playgroud)
如何从同一时间返回两个命令init?
我已经看过了Task.sequence,Task.parallel但是它们看起来很适合运行多个任务,而不是特别是命令.
我在StackOverflow 看到了这个ReasonML vs TypeScript问题,现在我想知道ReasonML和Elm如何相互比较.
他们有什么相似之处和不同之处?我应该在哪个时候使用?一个优于另一个的优势是什么?
我为学习目的构建了一个简单的应用程序,并希望能够在用户按下Enter输入字段中的键时调度操作
view : Model -> Html Action
view model =
let
items = List.map (\ item -> li [] [ text item ]) model.items
in
div [] [
input [ onInput Change, value model.content ] [],
button [ onClick Add ] [ text "Submit" ],
ul [] items
]
Run Code Online (Sandbox Code Playgroud)
这是视图代码.我希望这足以解释我对你的意图.我想要的是当用户在Enter输入一些文本到输入字段时按下键时调度某些动作的能力.
我试图使用String.toInt将字符串转换为整数.但是,当我想将结果绑定到变量然后用它做一些简单的数学时,我得到这个错误:
函数
add期望第二个参数是:Run Code Online (Sandbox Code Playgroud)Int但它是:
Run Code Online (Sandbox Code Playgroud)Result String Int
我怎样才能提取结果的整数部分?
我是榆树的新人.看到一种允许你开发前端内容的函数式语言很有意思.现在,即使我很好地遵循这里描述的步骤,我仍然遇到模块问题.
代码是
module Main where
import Html exposing ( Html )
import Signal
main : Signal Html.Html
main = Html.text "This should work."
|> Signal.constant
Run Code Online (Sandbox Code Playgroud)
我以前elm-reactor -a='localhost'能够查看我的输出.但我收到一个错误,无法找到模块"HTML":
I cannot find find module 'Html'.
Module 'Main' is trying to import it.
Potential problems could be:
* Misspelled the module name
* Need to add a source directory or new dependency to elm-package.json
Run Code Online (Sandbox Code Playgroud)
(注意双重"发现"嘿嘿)修复建议没有帮助我.或者可能是因为我无法正确理解.json文件的使用.
ELM-的package.json:
{
"version": "1.0.0",
"summary": "testing elm",
"license": "BSD3",
"source-directories": [
".",
"./bin/"
], …Run Code Online (Sandbox Code Playgroud) 在Classic FRP的最近实现中,例如反应性香蕉,存在事件流和信号,它们是阶梯函数(反应性香蕉称它们为行为,但它们仍然是阶梯函数).我注意到Elm只使用信号,并没有区分信号和事件流.此外,反应性香蕉允许从事件流转变为信号(编辑:并且它可以使用重新作用对行为采取行动'虽然不被认为是良好做法),这意味着理论上我们可以应用所有事件流通过首先将信号转换为事件流,应用然后再次转换,对信号/行为进行组合.因此,鉴于它通常更容易使用并只学习一个抽象,分离信号和事件流的优势是什么?在使用信号和转换所有事件流组合器以对信号进行操作时是否有任何损失?
编辑:讨论非常有趣.我自己讨论的主要结论是,行为/事件源既需要相互递归的定义(反馈),也需要输出依赖于两个输入(一个行为和一个事件源),但只在一个时产生一个动作.他们改变了(<@>).
我正在Elm写一个带有很多时间依赖事件的网页游戏,我正在寻找一种方法来安排特定时间延迟的事件.
在我使用的JavaScript中setTimeout(f, timeout),显然效果非常好,但是 - 出于各种原因 - 我想避免使用JavaScript代码并单独使用Elm.
我知道我可以subscribe按Tick特定间隔收到时钟滴答,但这不是我想要的 - 我的延迟没有合理的共同点(例如,两个延迟是30ms和500ms),我想避免必须处理许多不必要的滴答声.
我也遇到了Task和Process-似乎通过他们我莫名其妙地能什么我想Task.perform failHandler successHandler (Process.sleep Time.second).
这可行,但不是很直观 - 我的处理程序只是忽略所有可能的输入并发送相同的消息.此外,我不希望超时失败,因此创建失败处理程序感觉就像是在为图书馆供电,这不是我对这种优雅语言所期望的.
是否存在类似于Task.delayMessage time message我需要的东西(在指定时间后发送给我的消息参数的副本),或者我是否必须为它创建自己的包装器?
我正在关注Elm指南,我正处于尝试为时钟示例实现"暂停"按钮的位置.在指南中写道:
添加一个按钮以暂停时钟,关闭时间订阅.
我所做的就是paused为模型添加一个属性并在更新函数中使用它.我该如何取消订阅?
module Main exposing (..)
import Html exposing (Html)
import Html.App as App
import Html.Events exposing (onClick)
import Svg exposing (..)
import Svg.Attributes exposing (..)
import Time exposing (Time, second)
main =
App.program
{ init = init
, view = view
, update = update
, subscriptions = subscriptions
}
type alias Model =
{ time : Time
, paused : Bool
}
init : ( Model, Cmd Msg )
init =
( Model 0 False, …Run Code Online (Sandbox Code Playgroud) 我正在编写一个elm程序,它应该在HTML列表中格式化其输出.我想要的功能,
inputs = ["first", "second", "third"]
Run Code Online (Sandbox Code Playgroud)
并输出某种Element基本上是榆树的,
<ul>
<li>first</li>
<li>second</li>
<li>third</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
可悲的是,我找不到任何内置函数来执行此操作.也许markdown语法可以扩展为采用类似Mustache的模板,
[markdown|
{{#inputs}}
* {{text}}
{{/inputs}}
]
Run Code Online (Sandbox Code Playgroud)
(抱歉,我不确定对于字符串数组而不是对象数组,正确的Mustache语法是什么.
原始的HTML元素发射也很好.提前致谢!