0

我正在创建一个可用于概述您的 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 数据库),并通过检查项目将其与开发版本进行比较。

任何帮助表示赞赏

4

1 回答 1

1

您的错误描述有点缺乏,项目太复杂而无法快速重现。

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

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

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

于 2021-12-29T07:48:22.693 回答