问题标签 [reflex]

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 回答
355 浏览

haskell - 带有反射 frp 的单个 svg 元素

我正在尝试在反射 FRP 中编写单个 SVG 元素

这不编译。希望Data.Map是正确的。我从quickref知道类型签名是:

有点好奇 monad 与什么m有关,mainWidget但主要是开始工作。

这是使用reflex附带的沙箱编译的。

0 投票
0 回答
220 浏览

haskell - Haskell Reflex:字符串类型错误

我正在研究 github 页面上的 reflex-frp 示例,并被困在 Dynamics and Events 部分。我尝试使用 ghcjs 编译以下代码:

但我得到了错误

我知道字符串应该被解析为 Data.Text.Internal.Text,但不知道如何做到这一点 - 我认为顶部的 OverloadedStrings 语句应该解决这个问题。有谁知道如何解决这个错误?

0 投票
1 回答
162 浏览

haskell - 你如何定义一个不能推导的类型的 Haskell 类型类?

我正在使用Reflex.Dom 库,它定义了一组用于创建 HTML DOM 元素的函数

  • el创建一个元素
  • el'创建并返回一个元素
  • elAttr创建具有给定属性的元素
  • elAttr'创建并返回具有给定属性的元素
  • ETC

我正在制作自己的小部件库,我不想为每个小部件定义所有这些变体。所以我写了一个类型类,它使用相同的名称,但是根据彼此定义所有函数,每个实例中只定义一个:

我创建了一个使用原始实例elAttr'来测试它的实例。有效:

然后我创建了一个Button小部件实例,它在单击按钮时返回一个事件。有效:

我希望能够编写小部件,所以我尝试重写Button实例以使用Text实例ElMaker来创建元素。但它无法编译:

编译器输出:

我认为这是因为该函数没有对限制其类型的值做任何事情,并且编译器确实希望它具有具体类型。但是这个类型类并不关心那个类型参数的值是什么。有什么办法可以编译这个吗?

0 投票
1 回答
554 浏览

haskell - 如何在 Reflex Dynamic 内的值上进行分支?

在最简单的情况下,假设我有一个Dynamic t Bool,当值为 true 时,我希望存在一个空 div,而当值为 false 时,我不希望有任何 dom 元素。

更一般地说,如果我有 a Dynamic t (Either MyA MyB),并且我有知道如何渲染给定 aDynamic t MyA或 aDynamic t MyB的函数,我如何调用适当的函数来渲染?

0 投票
1 回答
227 浏览

haskell - 如何有效地对 Reflex.Dynamic 中的值进行分支?

假设我有一些应用程序状态,在某个后端系统上维护。看起来像这样

我还有一个从后端系统获取最新状态的功能

我很确定我可以通过反复查询后端来弄清楚如何将其打包成动态,这样我就有了

我想把它渲染成 html。我希望数据结构的每个部分都呈现给一个 div。但是,根本不应该渲染不存在的东西——所以,当ms2_maybe_charis时Nothing,它不应该有 div,而当MyStateis a时State1,不应该有 div State2

为了清楚起见,举几个例子:

变成

变成

理想情况下,DOM 的每个部分都应该只在必要时进行修改——所以如果ms2_maybe_charNothingto更改Just 'a',则需要创建一个新的 div。或者如果ms1_text"foo"变为"bar",那么我们需要在 DOM 中更改该字符串。但是,更改ms1_text不应导致重绘兄弟节点或父节点。

我应该如何构建我的代码?getLatestState考虑到api 作为构建块,这甚至可能吗?我是否完全错过了 Reflex 的要点,试图建立一个单一的Dynamic价值,我需要重新考虑我的方法?

特别是,第一个绊脚石是我无法轻松检查 Dynamic 以了解它是否包含 State1 或 State2。我可以在这里使用dynor widgetHold,以及fmap一个dynMyState可以将状态视为简单值并生成m ()绘制整个事物的动作的函数。但是,然后我失去了所有的共享——整个 UI 将在每次状态更改时从头开始重新绘制。

注意:这是一个更详细的后续问题,我如何在 Reflex Dynamic 内的值上进行分支?. 这个问题的不同/更清楚的是,不丢失检查值内所有内容的有效更新的额外愿望。感谢所有在这个问题上提供帮助的人!

0 投票
2 回答
66 浏览

frp - 切换到包装在单子上下文中的事件

我的具体问题是这样的:

给定 anEvent t [a]和 an Event t ()(假设它是一个滴答事件),我想生成一个Event t a,即一个事件,它为每次发生滴答事件提供输入列表中的连续项目。

Reflex 有以下助手:

这正是我想要的,但不将事件作为输入,而只是一个列表。鉴于我有一个Event t [a],我认为我可以产生一个包含事件的事件并只是切换,但问题是它zipListWithEven在单子上下文中运行,因此我可以得到:

这是switch原始人不接受的东西。

现在,也许我以错误的方式接近它,所以这是我的一般问题。给定一个生成坐标列表和刻度事件的事件,我想生成一个可以“使用”沿坐标移动对象的事件。因此,每次触发滴答声时,都会更新位置。每次我更新坐标列表时,它都会开始从该新列表中生成位置。

0 投票
1 回答
153 浏览

haskell - Haskell:如何修复“类型变量歧义”编译器错误?

我正在使用 GHCJSi,版本 0.2.0-7.10.3:http ://www.github.com/ghcjs/ghcjs/ 和来自https://github.com/reflex-的 reflex-dom 库版本 0-4 frp/反射域。我没有使用来自 Hackage 的 reflex-dom-0.3。

以下 Haskell 程序无法使用 reflex-dom-0.4 编译:

我得到错误

我内联了 reflex-dom 库函数decodeXhrResponse(以及decodeText)。我将类型签名更改为FromJSON a => XhrResponse -> Maybe a没有类型变量的签名XhrResponse -> Maybe Apod。然后程序编译成功。

我试图为 rspApod 添加一个作用域类型变量,例如 rspApod :: Event t Apodor rspApod :: Event Spider Apod但它没有帮助。

问题:

如何更改第一个程序才能成功编译?(内联和更改库函数是一个非常糟糕的技巧!)

为什么编译器没有找到并使用FromJSON数据类型的实例Apod

0 投票
0 回答
235 浏览

jquery - 材质 UI + reflex-frp => 下拉/选择不起作用

我尝试将 Material UI 与 reflex frp 集成 - 虽然正常(仅 css 元素)看起来不错且光滑 - 似乎下拉/选择表单元素需要一些 jQuery 来初始化 - 这不起作用:

我试图重新排序<script>语句index.html并将runmain.js-line 之前的 document-ready-jQuery 字符串放入正文中。

我还通过插入一个alert.

Main.hs

index.html

0 投票
2 回答
279 浏览

haskell - ReflexFRP:如何在按钮单击时从 textInput 设置按钮文本

我有一个简单的小部件,它应该从给定的文本输入字段设置按钮的“文本”。

虽然我设法做了一个简单的清晰功能

我没有设法设置按钮标签 - 下面的代码编译

但查看输出index.html- 我只得到一个带有控制台错误消息的白页:

rts.js:7313 thread blocked indefinitely in an MVar operation

0 投票
1 回答
383 浏览

haskell - 如何从 reflex-dom 列表框中获取 DoubleClicked 事件

以下代码将 reflex-dom 下拉元素直观地显示为列表框,并始终在底部显示最后选择(单击)的行。

我想更改此代码,因此它始终显示在底部最后双击的行!

我尝试了几件事

  • 使用domEvent函数:这不起作用,因为Dropdown不是HasDomEvent类的实例。
  • 在 Dropdown 记录的值_dropdown_change中过滤事件。但我没有找到任何方法来仅过滤 DoubleClick 事件。
  • 使用新类型 EventSelector。我再一次看不到我可以使用它。

问题:如何获得双击事件?