问题标签 [fabulous]

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 投票
0 回答
176 浏览

xamarin.forms - F# Fabulous Xamarin:无需用户输入即可从代码更新视图

我是 Elmish.Xamarin 和 Xamarin 本身的新手。我正在尝试使用这个计算器示例构建一个应用程序。主要区别在于,在此示例中,UI 会根据用户输入进行更新,并且update函数是纯函数,仅评估模型的下一个状态:

我需要一个不同的场景:用户的输入不会直接影响 UI,而是存储用户的消息并按计划评估下一个状态,所以在我的应用程序的核心中,我传递了updateUI: gameState -> unitfunc:

问题是我不明白,要传递什么函数以及如何与这个设计建立交互,因为据我所见,它希望我传递纯函数来评估下一个状态,其余的都在下面完成。

0 投票
1 回答
193 浏览

xamarin - F# Fabulous Xamarin:外部事件订阅

我是 Fabulous 和 MUV 模型的新手,我正在尝试实现适用于 BLE 的应用程序。我对 F# 也有点陌生,过去主要使用 erlang 和 C#,所以对外部事件处理有点迷茫。CrossBluetoothLE.Current.Adapter 具有 DeviceDiscovered 事件处理程序 (IEvent)。将此事件处理程序链接到 Fabulous 更新功能的最正确方法是什么?

例如,在我调用 CrossBluetoothLE.Current.Adapter.StartScanningForDevicesAsync() 之后,我希望这个事件处理程序将新发现的设备提供给更新函数。

如果我会做这样的事情(这不起作用):

如果它有效,则可以进行设备发现,因为 CrossBluetoothLE.Current.Adapter 是静态的。然而,在设备被发现后,我将需要使用(例如接收通知或来自它的回复),并且不可能将动态设备处理程序包含到 Program.withSubscription 中。

不确定 Fabulous 是否适用于此。

0 投票
0 回答
217 浏览

android - 删除 View.ListView 中的最后一个分隔符(F# Fabulous)

我知道删除所有分隔符的选项

View.ListView (separatorVisibility = SeparatorVisibility.None)

但是有没有一个选项可以在最后一项之后只删除分隔符而不在单元格中构建我自己的分隔符?

0 投票
1 回答
157 浏览

xamarin - 在 Fabulous (F#) UWP 应用程序中使用 Xamarin Essentials 文件选择器

我正在测试使用 Fabulous 框架编写功能性跨平台应用程序的 UWP 应用程序,并且我想在按下按钮时使用 FilePicker 并将所选文件用于某些数据处理。

Executing let fileResult = FilePicker.PickAsync() |> Async.AwaitTask打开文件选择器并在选择Async<FileResult>文件后返回 a (这表示按钮和后续函数调用执行),但它后面的其余代码将在结果可用之前执行。如果我附加|> Async.RunSynchronously它(如预期的那样)阻塞线程并且在出现的窗口中不能选择任何文件,尽管返回值将是 FileResult。

在研究了应该如何完成之后,我意识到应该在主线程上打开文件选择器,这导致我找到了以下表单的解决方案

这将返回Async<FileResult>,但似乎从未访问过 Device.BeginInvokeOnMainThread 块。我将如何打开 FilePicker,选择一个文件,然后在这样的应用程序中处理该文件?

0 投票
0 回答
85 浏览

sqlite - 转换数据对象 - F#、Fabulous、sql-net-pcl 和 Web API 客户端库

我对 F# 非常陌生,并试图找出在相似但不同的数据对象之间进行转换的最佳方法,同时最大限度地减少代码重复。我正在使用适用于 Xamarin Forms 的 Fabulous F# MVU 框架编写应用程序。

我正在使用 sqlite-net-pcl 进行数据持久性,它在创建数据库表并与该表交互时调用一个对象,并且我创建了一个AuthorObject

Fabulous 使用模型的记录类型,我创建了一个Author记录类型以在 Fabulous 内部传递:

但我还必须与返回AuthorDetailDto对象的 Web 服务 API 库(用 C# 编写)进行交互。AuthorDetailDto上面有与上面相同的命名属性,还有更多我不需要担心的。我无法更改 的定义AuthorDetailDto

所以目前的限制似乎是 sqlite-net-pcl 需要一个带有成员的对象,Fabulous 需要一个记录类型,而且我有这个AuthorDetailDto对象来自我无法更改的服务 API 客户端库。我需要在这些类型之间进行转换,我最初希望我能侥幸逃脱:

但是由于增加了复杂性AuthorDetailDto,我发现我现在需要做这样的事情来让编译器满意:

以下是一些源文件:

DomainModels.fs:

作者.fs:

初始调用如下所示:

该错误是FS0001 This expression was expected to have type 'DomainModels.Author' but here has type 'AuthorDetailDto'由于在 Author.fs 中引用了这两种类型。

我尝试过使用inline静态成员约束,并尝试定义接口,但由于Author需要成为记录类型并且无法更改AuthorDetailDto,因此这种方法似乎不可行。或者我只是对 F# 不够精通。

对于那些比我更熟悉 F# 的人,解决这种情况以尽量减少代码重复的最佳方法是什么?