问题标签 [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 投票
2 回答
1043 浏览

haskell - 带有反射/反射域的 XhrRequest

我想执行一个基本的 Ajax 请求,仅此而已。

reflex用于前端和Scotty后端。Firefox Web 控制台告诉我请求成功,我在那里看到了预期的结果。但是网站从 切换Just "default"Nothing而不是Just "success!".

这是一个完整的最小示例:

Scotty部分:

由于调试工具告诉我请求成功,我怀疑附近的错误,decodeXhrResponse但我有点迷失如何继续调试,因为它只是被编译为(不可读的)Javascript。

我使用来自 GitHub 的 try-reflex Nix 脚本来设置所有内容并ghcjs hello.hs在 Nix 环境中编译。

编辑:添加输出curl

0 投票
1 回答
443 浏览

haskell - 为什么此 Reflex 代码会导致 Dynamics 无限期地以相同的值触发?

这个小程序的目的是显示三个按钮,第三个按钮的标签最初是“0”,然后是最后点击按钮的索引。现在按钮的数量和其他按钮的标签是不变的。

当我用 ghcjs 编译这个自包含文件并在浏览器中加载 Main.jsexe/index.html 时,我可以看到两个 traceDyns 在一个循环中触发,两者的值始终为 0。据我所知,什么都不应该发生直到单击按钮,因为 _el_clicked 为系统的其余部分提供信息。

另外,请注意,我使用mapDyn (fst . head . Map.toList)它是为了提取所选按钮的索引 - 我不确定这是否正确,但无论哪种方式,我都不知道是什么导致了无限循环。

0 投票
1 回答
499 浏览

haskell - reflex-dom 中处理模态对话框的正确方法是什么?

我刚从reflex-dom库开始,我还不能完全弄清楚使用对话框的正确和方便的方法。

<body>显示对话框通常意味着在用户单击某个按钮、背景或按下(例如退出)时将一些元素添加到末尾并删除它。然而,从一些嵌套的小部件执行此操作意味着以某种方式将事件(“显示对话框”)冒泡到顶部,这可能非常笨拙。有没有其他方法可以做得很好?我刚刚看了一下markup.rocks,它似乎使用了一些JS/jQuery hacks。

可以决定不使用模式对话框(毕竟这可能不是一个坏选择),但对于某些事情我可能真的需要它。

0 投票
0 回答
159 浏览

javascript - 如何从 Haskell 的 Reflex 库中的图像创建动态画布?

我将图像表示为:

也就是说,RGBA Word32 像素的行主要未装箱数组。该格式与 JavaScript 的 Canvas 的 ImageData 使用的格式相同。您可以使用以下内容将这样的向量粘贴到 JS 的画布中:

我想要的是在 Haskell 上有一个小部件,它使用Dynamic Image. 这怎么可能?

0 投票
2 回答
355 浏览

haskell - 通过 reflex-dom 中的 websocket 检测关闭的服务器连接?

我一直在使用 reflex 和 reflex-dom 来重新创建棋盘游戏的 web 版本,到目前为止我非常喜欢它,但是我需要一个 websocket 来在其他玩家移动时提醒玩家。

一切正常,但如果服务器出现故障,我找不到检测它发生并重新连接的方法。此外,如果您在服务器关闭时向服务器发送事件,它只会被吃掉而没有任何错误。

我正在使用来自https://github.com/reflex-frp/reflex-examples/blob/master/websocket-echo/src/Main.hs的 websockets 示例的精简版本

我觉得应该有一种方法可以使用tickLossy 来发送超时的ping,比如一些动态的返回websockets,然后如果ping 持续了一定时间而没有响应则重新连接?但我无法想象重新连接的代码会是什么样子。

编辑:当 websocket 仍处于挂起状态时,reflex-dom 发送事件是一个问题。我提出了拉取请求,尽管我觉得某处有更好的解决方案。

0 投票
1 回答
482 浏览

haskell - 根据数字用户输入构建 reflex-dom 小部件/事件的动态列表

我正在尝试创建一个动态小部件列表,其中小部件的数量由用户输入的数值确定。此外,每个小部件都会返回一个点击事件。这是我用来获取用户输入的内容:

然后我用它来生成一个随机数生成器列表(这些是值的事实RandomGen并不重要。它们仅用于每个元素的内容,而不是元素的数量)。:

现在我有gs :: (MonadWidget t m, RandomGen g) => Dynamic t [g]. g每个小部件一个。这些小部件返回Event值,因此我需要将它们组合起来(即),然后在某处leftmost使用该值。foldDyn

但到目前为止,我最终得到了xs :: Dynamic t [Dynamic t (m (Event t MyType))].

我认为我真正需要的是以某种方式xs :: MonadWidget t m => Dynamic t [Event t MyType]代替,但即使使用除simpleList.

0 投票
2 回答
257 浏览

haskell - 为持续可测量的现象创建行为

我想Behavior t a从 an创建一个IO a,其预期语义是每次行为为sampled 时都会运行 IO 操作:

我希望我可以通过执行measurementin a来做到这一点pull

然而,结果Behavior在初始阶段后永远不会改变measure

我能想出的解决方法是创建一个Behavior“足够频繁”更改的虚拟对象,然后创建一个虚假的依赖项:

然后按预期工作;但由于Behaviors 无论如何只能按需采样,因此没有必要这样做。

创建一个Behavior连续的、随时可观察的现象的正确方法是什么?

0 投票
1 回答
117 浏览

haskell - 表示时间戳

我想代表来自HTMLMediaElement. 它的定义特征是:

  • 它的值表示为Double
  • 可以随时使用getCurrentTime :: IO Double(部分应用于给定的HTMLMediaElement)查询它
  • 它可能会不断变化(无论何时播放媒体播放器)

我最初的计划是将其表示为每次观察时都会Behavior t Double重新运行IO Double,但效果并不好。

我尝试过的事情:

  • 如本问题的解决方法部分所述,使用Behavior以固定频率在引擎盖下刺激的
  • 传递一个Event t ()表示所需采样频率的,并返回一个Event t Double包含重合时间戳的

我也不喜欢——第一个要么将行为(抱歉)与我的特定用例(如果我使用我将在我的应用程序中使用的最终采样频率)过度结合,要么看起来很浪费(如果我使用某些东西)就像创建时的 1 kHz 采样Behavior,然后在应用程序端以 60 Hz 采样),如果您想以不同的采样率对时间戳做不止一件事,第二个是非常不灵活的。

0 投票
1 回答
293 浏览

haskell - 将 requestAnimationFrame 转为 Event t()

使用 Reflex-DOM,我想Event t ()在浏览器准备好绘制下一帧时触发,即触发时requestAnimationFrame触发。我试过这样:

我的测试应用程序如下:

但是,计数并没有增加。然而,在浏览器的 JS 控制台上,我确实看到了两者about to fire the eventevent fired重复打印。

0 投票
1 回答
509 浏览

haskell - 类型推断 - 无法推断出 Monad

我正在构建一种向用户显示对话框的方法。

我想使用某种“默认”实例来初始化DialogConfigdialog函数,以便可以将其用作例如defaultConfig{_dialogConfig_content=content}. 但是,我正在与类型推断作斗争。这有效:

但是,当我使用一些默认值DialogConfig(例如,这里直接内联它)时,它不会:

错误是:

我可以在as中使用ScopedTypeVariables并键入默认配置,这样就可以了,但是即使没有它,它也不应该工作吗?在我看来,这些类型相当明确。confirmDialogDialogConfig t m a b