问题标签 [elm-architecture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
410 浏览

time - Elm,如何获取当前时间并将其发布到服务器

根据这个答案及其有用的 Ellie,我现在知道我们如何在 Elm 0.18 中获得当前时间。

我想获取当前时间,然后以 JSON 格式将其发布到我的服务器。我已经有一个使用硬编码时间戳的 POST,但我只是不知道如何获取当前时间,然后将其包含在我正在发布的 JSON 中。

我的猜测是我需要链接几个命令(获取当前时间,对服务器进行 POST)。

[我还阅读了另一个 SO,它显示了如何通过直接调用update函数连续运行一些命令,这听起来是个好主意,但我不确定它是否适合我的情况。]

实验([编辑] 可能比预期的更分散注意力)

为了解决这个问题,我想我会尝试解决一个类似的问题,我可以在 Ellie 中更轻松地设置它。

原始的 Ellie中获取当前时间,更新到模型中,然后视图函数显示它。

我的版本中,我希望这是一个两步的过程,因此已经将模型发展为一个Maybe Float时间和一个String信息。该view函数显示消息字符串和一个按钮——计划是,当按下按钮时,它会告诉运行时“获取当前时间,然后将其复制到消息槽中”。

如果我能解决这个问题,那么我觉得我可以解决我原来的问题。

我的 Ellie 还没有这样做。当您按下按钮时,时间将被获取并放入 中的time插槽model,但我不知道如何告诉运行时“......现在将该时间复制到消息插槽中”。消息到位,PutTimeInMessage但我不知道如何让它在GetCurrentTime消息/命令之后运行。

有什么建议么?

到目前为止,这是我的代码(它可以编译),您可以在 Ellie 中运行它:

0 投票
1 回答
208 浏览

elm - 如何在 Elm 中使用可变数量的 UI 元素构造消息和更新函数?

问候 StackOverflow!

假设我有一个带有可变数量的文本输入字段的 Elm 应用程序。我想在模型中反映这些输入字段的状态。

模型和视图很简单:视图只是Array String在某处有一个字段。

然后只需调用List.map (HTML input ...)该字符串列表即可计算视图。

但是,我有点迷失如何执行更新功能和消息类型。

消息可能是这样的:

type Msg = InputFieldUpdated Int String

这里,Int 是指要更新的字符串在 Array 中的位置。但是,如果我这样做,我可以通过将 Int 设置为超出范围的内容来创建引用不存在的数组位置的消息。

对于固定数量的输入元素,可以通过简单地为每个输入使用具有不同值的联合类型来非常优雅地解决这个问题,但是我的情况呢?在“使不可能的状态成为不可能”的领域中,我是否缺少一些技巧?

0 投票
1 回答
68 浏览

events - 将关注点与消息分开

我正在尝试制作一个通用模式,该模式将要显示的文本和要onClick在接受按钮上发送的事件作为参数。

有一个取消按钮,它与接受按钮共享隐藏功能。

所以我尝试onClick在接受时发送 2 个事件。一个用于接受逻辑,一个用于隐藏逻辑。这不起作用,只是第一个事件起作用了。

我尝试了另一种策略,隐藏事件可能有一个事件 OnHideModal (Maybe Msg),因此模态在接受之前合并两个事件,并OnHide隐藏模态并发送内部事件以继续处理。这在我看来太重了,因为如果您有 3 个或更多逻辑事件,那么您的所有事件都必须有另一个Maybe Msg. 而且我很难Cmd Msg对内部事件做出反应。

人们似乎建议做一个HideAndLogic事件,但这会导致大量复制和粘贴隐藏代码,每个逻辑一个。另外,逻辑将与隐藏逻辑联系在一起,这将使其更难理解。如果我想为逻辑发送一个事件而不隐藏任何内容,我将不得不制作另一个复制第一个逻辑一半的事件。这违背了基本的编程良好实践,所以我认为有些人可能已经找到了更好的方法。一种允许这些单独的逻辑即使在祖先事件中也能真正分离的方法。

使用榆树 0.18

0 投票
1 回答
104 浏览

architecture - elm state transition Msg

I've been struggling with how to organize my code in Elm, and after some googling I found this. It's not that recent but I've tried it and the result is pretty nice, compared to what I used to have. But trying to apply this to my states I find myself wanting to create empty Cmd just to send an Msg to the "root" update function, to transition from one State to the other. That doesn't seem right, I assume I'm just doing it wrong.

So let's say I have this:

When I'm in StateProjectList, I need to be able to transition to a StateProjectView somehow but it's view function returns a ProjectList.Types.Msg and not a regular Msg. One idea I've come up with would be to create an empty Cmd that would call back using TransitionProjectView, which doesn't seem right.

The other idea would be to use a Msg like ProjectList TransitionToProjectView and match that first in the root update function, not sure about that long term though.

I did see the note on Cmd.map's doc saying if you need this you're probably doing something wrong, unfortunately the link explaining what to do instead is dead. What would be the proper way to either transition from one state to the other, or a better architecture if this whole thing is wrong?

0 投票
2 回答
421 浏览

elm - 如何批量处理多个 http 调用?

我有一个报告,我用它作为基础来执行一些 Http 调用以获取每一行的详细信息。

这些调用是按顺序进行的,并且一个接一个地执行,这非常慢,因为我需要连续执行 20 个调用。我想做一些类似于 JavaScript 的事情

我曾经使用 Cmd.Batch 处理它们,但后来我找不到知道整个批次何时完成加载的方法,如果屏幕上没有足够的行,我需要加载另一个批次。

0 投票
2 回答
1188 浏览

elm - 如何使用 Elm 0.19 创建 SPA?

我正在尝试使用 Elm 构建一个 SPA 并创建三个页面,这些页面应该显示内容,这取决于 URL。

在此处输入图像描述

这三个页面的内容是相似的,例如Page.elm

在中Main.elm,我有以下代码:

编译器抱怨:

我知道类型是错误的,但不知道如何证明。

我怎样才能让它工作?

我还查看了https://github.com/rtfeldman/elm-spa-example/blob/master/src/Main.elm中的示例,但不知道它是如何工作的。

0 投票
1 回答
181 浏览

javascript - Elm,模型如何与订阅保持同步?

当您查看“榆树介绍”的摘录时:

model传递给函数的参数subscriptions必须与应用程序的当前模型相对应,即如果模型在不到 1 秒的时间内发生了变化,则model传递给函数的参数subscriptions必须考虑到这种修改。

在 JS 中,有 3 种不同的方法可以使在一个函数中计算的变量在另一个函数update msg model中可见subscriptions model

  1. 使其成为全球性的,
  2. 使其成为对象属性,
  3. 从 A 调用 B 时将其作为参数传递。

但只有 2 如果您在函数中具有异步代码subscriptions以保持模型“同步”:

1-使其成为全局变量,然后通过重新分配,更新当前模型的值:

2-使其成为对象属性

我的问题是它是如何在 The Elm Architecture 的“幕后”工作以保持模型updatesubscriptions函数之间的同步?

多谢!

0 投票
1 回答
71 浏览

task - 如何在 thenable 链上等待第一个到达的结果?

我们可以使用Promise.race等待thenable链上第一个到达的结果。Task模块似乎还不支持它,Task.sequence相当于Promise.all

Non-thenable解决方案演示:

运行它,按预期输出:

0 投票
1 回答
273 浏览

f# - 父子组合视图中的调度方法

我试图了解寓言应该如何与父子组合一起使用。update当涉及到方法、init和命令的定义时,事情就很简单了。但是view方法和它的dispatch方法很难找出

在我的代码中,孩子是:

在这个关于父子处理的文档之后,我定义了一个像这样的父:

到目前为止一切顺利,当涉及到视图本身的渲染时,我的问题就出现了。客户端视图使用如下函数:

where Msgis of typeDeploymentView.Msg 而在父视图中我可以访问 type 的调度Client.Msg -> unit。如何分解父调度以将其映射到子调度签名?

0 投票
1 回答
244 浏览

types - 什么是`init : () -> (Model, Cmd Msg)`注解?

榆树官方网站上有一个init我不明白的函数定义:

所以init函数返回 a tuple,那么为什么不将其符号定义为:

但在他们的示例init中返回一个返回 a 的函数tuple。这是真的?

()以及如何阅读init : () -> (Model, Cmd Msg)?例如,我可以说从任何东西返回一个元组吗?