Elm 如何在页面加载时过滤信号

Elm 如何在页面加载时过滤信号,elm,Elm,为了学习,我尝试只在单击按钮时加载内容。到目前为止,我已设法: 单击按钮时重新加载内容 并在单击时过滤信号(如果我发送的字符串不是“GETPERF”) 但我的问题是,页面加载后仍然会触发Ajax调用 代码如下: ——信号和邮箱 收件箱:信号。邮箱字符串 收件箱= Signal.mailbox“一些文本” 结果:Signal.Mailbox字符串 结果= 信号。邮箱“” --看法 视图:字符串->Html 查看消息= 分区[][ h1[]文本“邮箱3”], p[][文本消息], 按钮 [onC

为了学习,我尝试只在单击按钮时加载内容。到目前为止,我已设法:

  • 单击按钮时重新加载内容
  • 并在单击时过滤信号(如果我发送的字符串不是“GETPERF”)
但我的问题是,页面加载后仍然会触发Ajax调用

代码如下:

——信号和邮箱
收件箱:信号。邮箱字符串
收件箱=
Signal.mailbox“一些文本”
结果:Signal.Mailbox字符串
结果=
信号。邮箱“”
--看法
视图:字符串->Html
查看消息=
分区[][
h1[]文本“邮箱3”],
p[][文本消息],
按钮
[onClick inbox.address“GETPERF”]
[文本“单击性能”],
]
主:信号Html
主要=
Signal.map view result.Signal
--任务与效果
端口fetchReadme:Signal(任务Http.Error())
端口自述文件=
信号机
|>Signal.filter(\sig->sig==“GETPERF”)“boo”
|>Signal.map(\ \ \->Http.getString)http://localhost:3000/dates“`第二次'报告)
报告:字符串->任务x()
报表html=
Signal.send result.address html

有没有办法防止页面加载时的第一个Ajax调用?(或者更惯用的方法来实现这一切?

您收到初始ajax请求的原因是
信号。过滤器仍然保留
“boo”
的初始值(请参阅)。在下一个
Signal.map
语句中,使用下划线参数会忽略该值,但Http任务仍会返回,这就是为什么在页面加载时会看到初始ajax请求

sig
“GETPERF”
时,您可以编写一个仅在正确情况下发送ajax请求的条件,而不是使用
Signal.filter
。如果
sig
不是
“GETPERF”
(与页面加载一样),那么本质上,您可以通过返回
Task.success()
而不执行任何操作。下面是一个重构的
fetchReadme
函数,其中包含以下更改:

port-fetchReadme:Signal(任务Http.Error())
端口自述文件=
让
获取报告信号=
如果sig==“GETPERF”,则
Http.getString“http://localhost:3000/dates"
`第二次报告
其他的
Task.success()
在里面
Signal.map获取和报告inbox.Signal