问题标签 [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.
haskell - 带有反射/反射域的 XhrRequest
我想执行一个基本的 Ajax 请求,仅此而已。
我reflex
用于前端和Scotty
后端。Firefox Web 控制台告诉我请求成功,我在那里看到了预期的结果。但是网站从 切换Just "default"
到Nothing
而不是Just "success!"
.
这是一个完整的最小示例:
和Scotty
部分:
由于调试工具告诉我请求成功,我怀疑附近的错误,decodeXhrResponse
但我有点迷失如何继续调试,因为它只是被编译为(不可读的)Javascript。
我使用来自 GitHub 的 try-reflex Nix 脚本来设置所有内容并ghcjs hello.hs
在 Nix 环境中编译。
编辑:添加输出curl
:
haskell - 为什么此 Reflex 代码会导致 Dynamics 无限期地以相同的值触发?
这个小程序的目的是显示三个按钮,第三个按钮的标签最初是“0”,然后是最后点击按钮的索引。现在按钮的数量和其他按钮的标签是不变的。
当我用 ghcjs 编译这个自包含文件并在浏览器中加载 Main.jsexe/index.html 时,我可以看到两个 traceDyns 在一个循环中触发,两者的值始终为 0。据我所知,什么都不应该发生直到单击按钮,因为 _el_clicked 为系统的其余部分提供信息。
另外,请注意,我使用mapDyn (fst . head . Map.toList)
它是为了提取所选按钮的索引 - 我不确定这是否正确,但无论哪种方式,我都不知道是什么导致了无限循环。
haskell - reflex-dom 中处理模态对话框的正确方法是什么?
我刚从reflex-dom库开始,我还不能完全弄清楚使用对话框的正确和方便的方法。
<body>
显示对话框通常意味着在用户单击某个按钮、背景或按下(例如退出)时将一些元素添加到末尾并删除它。然而,从一些嵌套的小部件执行此操作意味着以某种方式将事件(“显示对话框”)冒泡到顶部,这可能非常笨拙。有没有其他方法可以做得很好?我刚刚看了一下markup.rocks,它似乎使用了一些JS/jQuery hacks。
我可以决定不使用模式对话框(毕竟这可能不是一个坏选择),但对于某些事情我可能真的需要它。
javascript - 如何从 Haskell 的 Reflex 库中的图像创建动态画布?
我将图像表示为:
也就是说,RGBA Word32 像素的行主要未装箱数组。该格式与 JavaScript 的 Canvas 的 ImageData 使用的格式相同。您可以使用以下内容将这样的向量粘贴到 JS 的画布中:
我想要的是在 Haskell 上有一个小部件,它使用Dynamic Image
. 这怎么可能?
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 发送事件是一个问题。我提出了拉取请求,尽管我觉得某处有更好的解决方案。
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
.
haskell - 为持续可测量的现象创建行为
我想Behavior t a
从 an创建一个IO a
,其预期语义是每次行为为sample
d 时都会运行 IO 操作:
我希望我可以通过执行measurement
in a来做到这一点pull
:
然而,结果Behavior
在初始阶段后永远不会改变measure
。
我能想出的解决方法是创建一个Behavior
“足够频繁”更改的虚拟对象,然后创建一个虚假的依赖项:
然后按预期工作;但由于Behavior
s 无论如何只能按需采样,因此没有必要这样做。
创建一个Behavior
连续的、随时可观察的现象的正确方法是什么?
haskell - 表示时间戳
我想代表来自HTMLMediaElement
. 它的定义特征是:
- 它的值表示为
Double
- 可以随时使用
getCurrentTime :: IO Double
(部分应用于给定的HTMLMediaElement
)查询它 - 它可能会不断变化(无论何时播放媒体播放器)
我最初的计划是将其表示为每次观察时都会Behavior t Double
重新运行IO Double
,但效果并不好。
我尝试过的事情:
- 如本问题的解决方法部分所述,使用
Behavior
以固定频率在引擎盖下刺激的 - 传递一个
Event t ()
表示所需采样频率的,并返回一个Event t Double
包含重合时间戳的
我也不喜欢——第一个要么将行为(抱歉)与我的特定用例(如果我使用我将在我的应用程序中使用的最终采样频率)过度结合,要么看起来很浪费(如果我使用某些东西)就像创建时的 1 kHz 采样Behavior
,然后在应用程序端以 60 Hz 采样),如果您想以不同的采样率对时间戳做不止一件事,第二个是非常不灵活的。
haskell - 将 requestAnimationFrame 转为 Event t()
使用 Reflex-DOM,我想Event t ()
在浏览器准备好绘制下一帧时触发,即触发时requestAnimationFrame
触发。我试过这样:
我的测试应用程序如下:
但是,计数并没有增加。然而,在浏览器的 JS 控制台上,我确实看到了两者about to fire the event
并event fired
重复打印。
haskell - 类型推断 - 无法推断出 Monad
我正在构建一种向用户显示对话框的方法。
我想使用某种“默认”实例来初始化DialogConfig
该dialog
函数,以便可以将其用作例如defaultConfig{_dialogConfig_content=content}
. 但是,我正在与类型推断作斗争。这有效:
但是,当我使用一些默认值DialogConfig
(例如,这里直接内联它)时,它不会:
错误是:
我可以在as中使用ScopedTypeVariables
并键入默认配置,这样就可以了,但是即使没有它,它也不应该工作吗?在我看来,这些类型相当明确。confirmDialog
DialogConfig t m a b