【问题标题】:rid3, shadow-cljs & drag; different behavior in dev and prodrid3,shadow-cljs & 拖动; dev 和 prod 中的不同行为
【发布时间】:2022-01-27 10:39:54
【问题描述】:

我正在创建一个应用程序,可用于概述您的 IT 环境。目前,它可以显示一个表格,其中包含您环境中的接口及其连接的应用程序。它还能够根据这些数据创建 SVG 图像。它自己的数据可以通过 API 调用添加。

我通过以下方式开始了一个项目:

leiningen new luminus versiontracker +h2 +shadow-cljs +kee-frame +swagger +(some other)

为了能够生成支持拖放的 SVG 文件,我将 rid3 添加到项目 .clj 文件中。

当我在开发模式下运行应用程序时:

lein repl

lein shadow-cljs watch app

我可以拖动生成的 SVG 文件中的任何项目。我可以点击一个圆圈并将其拖动到我想要的任何地方。

但是,当我创建“生产”版本时:

lein uberjar

然后使用以下命令运行此应用程序:

java -Dconf=config.edn -jar versiontracker.jar

拖动对象无法正常工作。整个 SVG 被选中,而不是 SVG 图像中的单个对象;这会导致奇怪的拖放行为。

通过控制台窗口查看事件,我可以看到不同的行为。

  • 在开发环境中,如果我抓取一个圆圈(附加了拖动功能),sourceEvent 中的 srcElement 就是显示在该圆圈顶部的文本。虽然没有选择圆圈,但拖动按预期工作。拖动时所选项目跟随鼠标。
  • 在“生产”环境中,如果我抓住一个圆圈,sourceEvent 中的 srcElement 就是完整的 svg;这会导致奇怪的拖放行为。所选项目不跟随鼠标,但项目确实开始以不可预知的方式移动。

Version Tracker下载生产版本的带有标签V0.3.0的版本(还有一个带有一些示例数据的H2数据库)并通过查看项目将其与开发版本进行比较。

感谢任何帮助

【问题讨论】:

    标签: svg d3.js drag-and-drop clojurescript shadow-cljs


    【解决方案1】:

    您的错误描述有点欠缺,而且项目过于复杂,无法快速重现。

    您在构建时是否收到任何外部推理警告?您是否在生产版本的浏览器控制台中收到任何错误/警告?

    这里最可能的原因是外部人员。这意味着像 (set! (.-fx d) (.-x event)) 这样的属性名称可能最终会被重命名或剥离。因此,它会破坏任何依赖选择正确名称的行为。有关该主题的更多信息,请参阅documentation。在适当的地方添加几个^js 提示可能就足够了。

    您还使用了相当旧的shadow-cljs 版本(截至今天的当前版本是2.16.10)。因此,您需要在构建配置中通过:compiler-options {:infer-externs :auto} 选择加入以获取外部推理警告。较新的版本默认启用此功能。

    【讨论】:

    • 非常感谢,这很有帮助。我将 ^js 添加到 (.-fx d) 部分,将它们变成 (-fx ^js d)。这成功了。
    猜你喜欢
    • 2015-08-10
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多