问题标签 [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.
f# - 如何像组件框架一样将逻辑封装在子级中?
我试图了解如何使用 WebSharper 的 F# Bolero 中的 Elmish 架构创建可重用组件(例如,可重用的验证表单输入)。从我看到的所有示例中,顶级父级必须处理所有消息/更新和逻辑,而子级仅用于视图。我想知道是否有办法解决这个问题,是否让孩子处理自己的状态+消息,并将某些消息传播给父母(我在下面的代码中尝试过),或者是否有另一种设计来处理这个问题。
在我的具体情况下,我正在尝试为验证两个字段都不为空的用户名创建表单输入组件。我不喜欢让父处理更新各个字段 FirstName 和 LastName 的想法,它应该只关心获取 Submit 消息。如果您多次使用孩子,处理孩子产生的每条消息都会导致大量样板文件
注意:我提供的代码无法编译,因为我正在努力理解如何实现我的预期设计
elmish - 等同于 Elm 风格的 model-view-update 中的数据绑定模型更新
MVU 状态变化
据我了解 Elm 风格的模型-视图-更新架构,应用程序状态的更改遵循定义更新状态的消息的发送。这里的状态是不可变的,因此更改会导致一组全新的应用程序状态。
例如,在下面(取自Fabulous项目)中,Pressed
消息导致状态Model.Pressed
变为true
。
我相信该消息将由于用户采取明确的操作而发送,例如单击提交或保存。
数据绑定状态更改
假设您在 WPF 中有一个模型,它可能实现INotifyPropertyChanged
并使用数据绑定将您的状态附加到用户界面。所以,这里的状态是可变的,并且会随着时间而改变。
当用户输入新值时,模型会因数据绑定而更新,而无需显式保存或提交。因此,模型中的任何计算值都将随着用户输入值而更新。Age
这是一个在输入新出生日期时更新值的模型示例。
问题
我的问题是,在 Elm 风格的模型-视图-更新架构中是否有等效的方法来创建一个用户界面,当用户以与可变模型的数据绑定视图类似的方式输入值时更新这些“计算的属性”?
reactjs - 模型属性改变时调用组件方法
在我的带有 Elmish 的 Fable 应用程序中,我有一个使用react- slick 的视图和一个应该能够在单击时更改幻灯片编号的按钮:
滑块的反应组件由 定义react-slick
。
我必须自己编写的寓言包装器,所以它不完整,因为我只定义了我需要的属性。
因此,虽然react-slick
定义了一个属性InitialSlide
来设置最初应该显示的幻灯片,但没有属性可以在之后更新幻灯片。有一种方法slickGoTo
可以做我想做的事。但我不知道如何或在哪里调用该方法,同时仍符合 Elmish。
我可以想象我必须扩展反应组件并监听模型属性,然后slickGoTo
在该属性更改时调用。但我不知道这是否可能。
所以我的问题是:如何slickGoTo
在不破解 Elmish 架构的情况下使用由组件定义的按钮来更改单击时的幻灯片编号?
redux - 安全模板 Elmish redux 开发工具消息总是“UserMsg”
我对 Elmish 很陌生。使用dotnet new SAFE
. 当我打开应用程序并使用 redux 开发工具 Chrome 扩展程序时,我总是收到“UserMsg”消息。当我点击按钮“-”或“+”时,有没有办法让它“增加”或“减少”?
f# - 如何做一个简单的 elmish 路由器?
抱歉,我是 Fable 和 F# 的新手。我从SAFE 项目开始了一个样板,并创建了一个有两个页面的 SPA。但是,所有逻辑都在一个文件中。我的问题是。如何实现将每个视图放在一个文件中的路由器?
我会这样:
下面是我的 Client.fs 文件
src/Client/Client.fs
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 应用程序中是否存在阻止执行外部脚本的内容?
非常感谢!
f# - Elmish:Program.withErrorHandler 是否处理 Cmd.ofAsync 的错误情况?
我试图在我的 Elmish (Fable) 应用程序中的每个可能位置捕获和记录错误。
如果我使用 Program.withErrorHandler 添加了日志处理程序,是否还需要将日志代码添加到每个 cmd.ofAsync 调用的错误案例中?
StackOverflow 说要显示一些代码,所以这是我的状态更新函数:
此代码将 ZipCode 视为“InvalidInput”,并在整个过程中使用用户友好的验证消息,直到收到成功的 LookupZipCodeResponse。
但是,如果对后端 API 的调用失败,我是否需要在 LookupZipCodeError 中添加我自己的日志记录代码,如果我已经提供了记录我提供给 Program.withErrorHandler 的函数?
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):
drop-down-menu - 如何在 Fable Elmish 的下拉菜单中设置默认值?
我想在下拉列表中有一个默认值,它不是可选选项之一(不是:DefaultValue“2”)。它应该类似于以下内容,但不适用于输入字段。
(我在 Select 中尝试了占位符,但没有用)
打开下拉列表后,默认值应该以灰色和斜体(或类似的东西)列出。我已经认识到我无法在选择菜单的选项属性中更改字体设置。
谢谢
f# - 避免在 Elmish 中嵌套样板?
假设我有这样的嵌套 Elmish 组件:A
contains B
contains C
。
然后如果C
有状态和消息,这些必须从 to 传递C
到B
然后 to A
。
例如,消息和模型类型B
可能是:
然后update
forB
会做一些路由:
然后必须为A
消费B
消息做同样的事情。
setState
例如,与 相比,这非常冗长。
在 Elmish 中管理此问题的一些策略是什么?