如何在cljs中调用js实例的方法

How to call a method of js instance in cljs

我是 cljs 的新手。我正在用 re-frame 练习 cljs。我在访问 js 实例的方法时遇到问题。

(->> quill-contents
    (.parse js/JSON)
    (.setContents @editor))

如果我尝试调用@editor 的.setContents,这是用r/atom 包裹的js 实例(实际上,它是Quill 编辑器实例)。实际上,这段代码在开发模式下运行良好,但它会抛出错误,例如在进行发布构建后 xi(...).hi is not a function

我猜.setContents在release build中被编译成.hi,所以它无法从js实例中找到方法。

我正在使用 shadow-cljs 来构建这个重新构建的项目。

我该如何解决这个问题?

是因为缺少externs。在@editor前加上^js

(->> quill-contents
    (.parse js/JSON)
    (.setContents ^js @editor))

在这种情况下,它将自动为 setContents 生成一个 extern。