rid3, shadow-cljs & 拖动;开发和生产中的不同行为
rid3, shadow-cljs & drag; different behavior in dev and prod
我正在创建一个应用程序,可用于概览您的 IT 环境。目前,它可以显示 table 以及您环境中的接口及其连接的应用程序。它还能够从该数据创建 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 文件中的任何项目。我可以点击一个圆圈,然后把它拖到我想要的任何地方。
然而,当我创建 'production' 版本时:
lein uberjar
然后 运行 此应用程序使用:
java -Dconf=config.edn -jar versiontracker.jar
拖动对象无法正常工作。选择整个 SVG 而不是 SVG 图像中的单个对象;这会导致奇怪的拖放行为。
通过控制台查看事件 window 我可以看到不同的行为。
- 在开发环境中,如果我抓取一个圆圈(附加了拖动功能),sourceEvent 中的 srcElement 就是显示在这个圆圈上方的文本。虽然没有选择圆圈,但拖动按预期工作。选中的项目跟随鼠标拖动。
- 在'production'环境下,如果我抓取一个圆圈,sourceEvent中的srcElement就是完整的svg;这会导致奇怪的拖放行为。所选项目不跟随鼠标移动,但项目确实开始以一种不可预测的table方式四处移动。
转到 Version Tracker 下载生产版本的标签为 V0.3.0 的版本(还有一个带有一些示例数据的 H2 数据库)并通过签出项目将其与开发版本进行比较。
感谢任何帮助
您的错误描述有点欠缺,项目太复杂,无法快速重现。
您在构建时是否收到任何外部推理警告?您在生产版本的浏览器控制台中得到任何 errors/warnings 吗?
最有可能的原因是外部人员。这意味着 属性 个名称,例如 (set! (.-fx d) (.-x event))
中的名称可能最终会被重命名或删除。因此,它会破坏任何依赖于选择正确名称的行为。有关该主题的更多信息,请参阅 documentation。在适当的地方添加几个 ^js
提示可能就足够了。
您还使用了相当旧的 shadow-cljs
版本(截至今天的当前版本是 2.16.10
)。因此,您需要在构建配置中通过 :compiler-options {:infer-externs :auto}
选择加入以获取外部推理警告。较新的版本默认启用此功能。
我正在创建一个应用程序,可用于概览您的 IT 环境。目前,它可以显示 table 以及您环境中的接口及其连接的应用程序。它还能够从该数据创建 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 文件中的任何项目。我可以点击一个圆圈,然后把它拖到我想要的任何地方。
然而,当我创建 'production' 版本时:
lein uberjar
然后 运行 此应用程序使用:
java -Dconf=config.edn -jar versiontracker.jar
拖动对象无法正常工作。选择整个 SVG 而不是 SVG 图像中的单个对象;这会导致奇怪的拖放行为。
通过控制台查看事件 window 我可以看到不同的行为。
- 在开发环境中,如果我抓取一个圆圈(附加了拖动功能),sourceEvent 中的 srcElement 就是显示在这个圆圈上方的文本。虽然没有选择圆圈,但拖动按预期工作。选中的项目跟随鼠标拖动。
- 在'production'环境下,如果我抓取一个圆圈,sourceEvent中的srcElement就是完整的svg;这会导致奇怪的拖放行为。所选项目不跟随鼠标移动,但项目确实开始以一种不可预测的table方式四处移动。
转到 Version Tracker 下载生产版本的标签为 V0.3.0 的版本(还有一个带有一些示例数据的 H2 数据库)并通过签出项目将其与开发版本进行比较。
感谢任何帮助
您的错误描述有点欠缺,项目太复杂,无法快速重现。
您在构建时是否收到任何外部推理警告?您在生产版本的浏览器控制台中得到任何 errors/warnings 吗?
最有可能的原因是外部人员。这意味着 属性 个名称,例如 (set! (.-fx d) (.-x event))
中的名称可能最终会被重命名或删除。因此,它会破坏任何依赖于选择正确名称的行为。有关该主题的更多信息,请参阅 documentation。在适当的地方添加几个 ^js
提示可能就足够了。
您还使用了相当旧的 shadow-cljs
版本(截至今天的当前版本是 2.16.10
)。因此,您需要在构建配置中通过 :compiler-options {:infer-externs :auto}
选择加入以获取外部推理警告。较新的版本默认启用此功能。