问题标签 [elmish]

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 投票
1 回答
233 浏览

f# - 如何像组件框架一样将逻辑封装在子级中?

我试图了解如何使用 WebSharper 的 F# Bolero 中的 Elmish 架构创建可重用组件(例如,可重用的验证表单输入)。从我看到的所有示例中,顶级父级必须处理所有消息/更新和逻辑,而子级仅用于视图。我想知道是否有办法解决这个问题,是否让孩子处理自己的状态+消息,并将某些消息传播给父母(我在下面的代码中尝试过),或者是否有另一种设计来处理这个问题。

在我的具体情况下,我正在尝试为验证两个字段都不为空的用户名创建表单输入组件。我不喜欢让父处理更新各个字段 FirstName 和 LastName 的想法,它应该只关心获取 Submit 消息。如果您多次使用孩子,处理孩子产生的每条消息都会导致大量样板文件

注意:我提供的代码无法编译,因为我正在努力理解如何实现我的预期设计

0 投票
1 回答
371 浏览

elmish - 等同于 Elm 风格的 model-view-update 中的数据绑定模型更新

MVU 状态变化

据我了解 Elm 风格的模型-视图-更新架构,应用程序状态的更改遵循定义更新状态的消息的发送。这里的状态是不可变的,因此更改会导致一组全新的应用程序状态。

例如,在下面(取自Fabulous项目)中,Pressed消息导致状态Model.Pressed变为true

我相信该消息将由于用户采取明确的操作而发送,例如单击提交或保存。

数据绑定状态更改

假设您在 WPF 中有一个模型,它可能实现INotifyPropertyChanged并使用数据绑定将您的状态附加到用户界面。所以,这里的状态是可变的,并且会随着时间而改变。

当用户输入新值时,模型会因数据绑定而更新,而无需显式保存或提交。因此,模型中的任何计算值都将随着用户输入值而更新。Age这是一个在输入新出生日期时更新值的模型示例。

问题

我的问题是,在 Elm 风格的模型-视图-更新架构中是否有等效的方法来创建一个用户界面,当用户以与可变模型的数据绑定视图类似的方式输入值时更新这些“计算的属性”?

0 投票
3 回答
310 浏览

reactjs - 模型属性改变时调用组件方法

在我的带有 Elmish 的 Fable 应用程序中,我有一个使用react- slick 的视图和一个应该能够在单击时更改幻灯片编号的按钮:

滑块的反应组件由 定义react-slick
我必须自己编写的寓言包装器,所以它不完整,因为我只定义了我需要的属性。

因此,虽然react-slick定义了一个属性InitialSlide来设置最初应该显示的幻灯片,但没有属性可以在之后更新幻灯片。有一种方法slickGoTo可以做我想做的事。但我不知道如何或在哪里调用该方法,同时仍符合 Elmish。

我可以想象我必须扩展反应组件并监听模型属性,然后slickGoTo在该属性更改时调用。但我不知道这是否可能。

所以我的问题是:如何slickGoTo在不破解 Elmish 架构的情况下使用由组件定义的按钮来更改单击时的幻灯片编号?

0 投票
1 回答
38 浏览

redux - 安全模板 Elmish redux 开发工具消息总是“UserMsg”

我对 Elmish 很陌生。使用dotnet new SAFE. 当我打开应用程序并使用 redux 开发工具 Chrome 扩展程序时,我总是收到“UserMsg”消息。当我点击按钮“-”或“+”时,有没有办法让它“增加”或“减少”?

0 投票
1 回答
999 浏览

f# - 如何做一个简单的 elmish 路由器?

抱歉,我是 Fable 和 F# 的新手。我从SAFE 项目开始了一个样板,并创建了一个有两个页面的 SPA。但是,所有逻辑都在一个文件中。我的问题是。如何实现将每个视图放在一个文件中的路由器?

我会这样:

下面是我的 Client.fs 文件

src/Client/Client.fs

0 投票
0 回答
149 浏览

f# - 将 Fable/Elmish 应用程序与 Stripe 结账集成

编辑: gitter 上有人建议这样做:

https://stripe.com/docs/recipes/elements-react

...所以我正在尝试并会在这里报告。


我正在创建一个 Fable/Elmish 应用程序,它将通过 Stripe 'Checkout' api ( https://stripe.com/docs/checkout/aspnet ) 进行付款。Stripe 要求您checkout.js按需获取脚本(即不通过 Node)。当放置在一个form元素中并通过属性提供一些值时data-,该脚本会在您的页面中添加一个付款按钮。例如,这是.cshtml来自 ASP dotnet 应用程序的工作视图:

我正在尝试在我的 Elmish 应用程序中做同样的事情,我认为这可以归结为:

渲染时,在客户端上显示如下:

...但是该按钮尚未创建,这向我表明该脚本尚未运行,或者它尚未找到插入该按钮的表单。script 元素确实出现在呈现页面的表单中:

除了通常遇到的套接字错误外,我在 Chrome 控制台上看不到任何浏览器错误。(我在有和没有结帐脚本的情况下都支持过,每种情况下都有两个相同的错误。)

如果我将脚本和表单放在我Index.html的硬连线值中,按钮确实会出现,但显然不在正确的位置。

我错过了什么?在 Elmish 应用程序中是否存在阻止执行外部脚本的内容?

非常感谢!

0 投票
1 回答
137 浏览

f# - Elmish:Program.withErrorHandler 是否处理 Cmd.ofAsync 的错误情况?

我试图在我的 Elmish (Fable) 应用程序中的每个可能位置捕获和记录错误。

如果我使用 Program.withErrorHandler 添加了日志处理程序,是否还需要将日志代码添加到每个 cmd.ofAsync 调用的错误案例中?

StackOverflow 说要显示一些代码,所以这是我的状态更新函数:

此代码将 ZipCode 视为“InvalidInput”,并在整个过程中使用用户友好的验证消息,直到收到成功的 LookupZipCodeResponse。

但是,如果对后端 API 的调用失败,我是否需要在 LookupZipCodeError 中添加我自己的日志记录代码,如果我已经提供了记录我提供给 Program.withErrorHandler 的函数?

0 投票
0 回答
73 浏览

xamarin.forms - How do I get a datagrid type control in fsprojects/Fabulous

fsproject/Fabulous does not appear to have a datagrid. That would be a columnated ListView with non-scrolling header and footer rows (not grouping headers). Such a control seems essential for any line of business (LOB) application. It is also necessary for tablet and desktop size screens that can present a lot of tabulated information clearly.

Am I missing something?

Presently, I am exploring constructing something as perhaps the following, but am still a novice at Xamarin and Fabulous (Fabulous-Simple-Elements actually):

0 投票
1 回答
219 浏览

drop-down-menu - 如何在 Fable Elmish 的下拉菜单中设置默认值?

我想在下拉列表中有一个默认值,它不是可选选项之一(不是:DefaultValue“2”)。它应该类似于以下内容,但不适用于输入字段。

(我在 Select 中尝试了占位符,但没有用)

打开下拉列表后,默认值应该以灰色和斜体(或类似的东西)列出。我已经认识到我无法在选择菜单的选项属性中更改字体设置。

谢谢

0 投票
1 回答
207 浏览

f# - 避免在 Elmish 中嵌套样板?

假设我有这样的嵌套 Elmish 组件:Acontains Bcontains C

然后如果C有状态和消息,这些必须从 to 传递CB然后 to A

例如,消息和模型类型B可能是:

然后updateforB会做一些路由:

然后必须为A消费B消息做同样的事情。

setState例如,与 相比,这非常冗长。

在 Elmish 中管理此问题的一些策略是什么?