问题标签 [clojurescript]

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.

0 投票
5 回答
8767 浏览

javascript - 习惯性地使用 clojurescript 访问 json 对象

任何人都有任何用于访问 javascript 对象的惯用 clojurescript 文档(返回为 json,本质上是一个哈希)?

我有一个通过 AJAX 请求返回的 JSON 对象:

如何使用 clojurescript 访问这些字段?

我可以:

但是当我有嵌套的值和对象时,它是如何工作的呢?

上面的内容似乎很笨拙,尤其是考虑到良好的 js 语法:data.o.answer。

使用 clojurescript 访问 json 对象的惯用方式是什么?

笔记:

我意识到我实际上可以使用 JS 语法来引用元素,这实际上非常方便。所以以下将正常工作:

0 投票
1 回答
1643 浏览

clojure - ClojureScript REPL 中 require 的语法

这当然是微不足道的,但我在任何地方都找不到。我正在尝试开始摆弄 ClojureScript。我能够使用ClojureScript One获得 ClojureScript REPL 。

我可以连接浏览器并在那里执行一些简单的 DOM 查询和操作。现在我想开始将一些有用的功能保存到模块中并根据需要加载它们。这就是我卡住的地方。

如果我尝试类似

我得到了例外FileNotFoundException Could not locate project/dom__init.class or project/dom.clj on classpath。我确实只有project/dom.cljs,因为我看到示例中的所有 ClojureScript 文件都使用此扩展名。

如果我尝试将其重命名为project.clj,我会收到有关缺少名称空间的投诉js。当然,我在模块中经常使用该命名空间。

编写一个可以与浏览器一起使用的简单 ClojureScript 文件并从 REPL 加载它的正确方法是什么?任何能够运行这个简单示例的东西都可以:

0 投票
1 回答
162 浏览

clojure - 从 ClojureScript REPL 中的错误中恢复

我正在尝试使用 ClojureScript,但它比我想要的更麻烦。

我能够获得与浏览器连接的 REPL 并与实时页面进行交互。问题是我无法从异常中恢复。我经常犯打字错误,导致异常。此外,当我在 ClojureScript 中找到自己的方法时,我正在收集一些有用的函数库。碰巧这些函数包含错误,当我加载这些模块时,我得到了其他异常。

在这种情况下,我唯一能做的就是用 Ctrl-C 停止一切。这很痛苦,因为在我完成任何事情之前,我必须再次启动 REPL,这涉及启动 JVM,这并不是很快。

到目前为止,有没有办法从 REPL 中的异常中恢复而不会丢失所有上下文?

0 投票
2 回答
6805 浏览

clojure - ClojureScript 互操作

我试图找出如何访问 ClojureScript 中的 Javascript 对象属性。如果我事先知道该物业的名称,那很容易。为了得到foo.bar我只是做

有没有办法访问名称仅在运行时才知道的属性?我正在寻找等效的 JS 语法foo[dynamicBar]

0 投票
1 回答
1917 浏览

clojurescript - ClojureScript 中没有定义 defmacro?

我正在尝试defmacro在 ClojureScript 中使用,但出现控制台错误:

这是产生错误的测试代码:

以及生成的 JavaScript 代码:

关于我做错了什么的任何指示?

0 投票
1 回答
852 浏览

html - 使用 ClojureScript 宏生成 javascript 方法调用代码?

我正在使用 ClojureScript 来检测定义了哪个浏览器特定版本的“requestAnimationFrame”方法。我使用以下代码:

这很好用,而且并不可怕,但我真的希望能够将方法名称放在一个列表中,即

然后为列表中的每个符号调用一个宏来生成匿名函数代码。

我想要这样的工作:

但是我玩了一段时间的宏,并没有达到这个效果。部分问题是方法名称和点符号的工作方式很奇怪,我什至不确定这是否可能。

有什么技巧可以让它工作吗?谢谢!

0 投票
3 回答
1425 浏览

clojure - Clojure let 允许多个同名绑定

我试图了解我在 Clojure 中注意到的一些行为。

可以使用重复多次的相同绑定名称创建一个 let 绑定:

我知道 let 绑定被评估,这一切都是有意义的。

我对文档的理解是“用 let 创建的本地变量不是变量。一旦创建,它们的值就永远不会改变!”

上面的语法是否真的改变了绑定的值?

这感觉应该引发错误。

作为一种旁注:

有趣的是,您可以使用 clojurescript 将上述内容输出为 JS:

在这里,我们可以看到这些值实际上都是不同的变量,这表明了幕后发生的事情,但一些澄清会非常有帮助。

0 投票
2 回答
2025 浏览

clojure - 多方法的一般语法

如果这个问题是微不足道的,我很抱歉,但是一些谷歌搜索并没有把我带到任何地方。defmulti和的一般语法是defmethod什么?我可以编写简单的多方法,但我不确定我可以将文档字符串、前后条件、元数据等放在哪里。

我实际上对 ClojureScript 比对 Clojure 更感兴趣,所以如果两者之间存在差异,请告诉我。

0 投票
3 回答
2080 浏览

events - 在 Clojure/ClojureScript 中处理事件驱动编程

我正在尝试了解如何在 ClojureScript 中建模事件。在 JavaScript 中设计事件队列很容易。您只需保留一个(可变)函数数组,并提供辅助函数来添加或删除数组中的回调。当您触发事件时,只需遍历数组中列出的所有回调并一个接一个地调用它们。

这种范式与函数式风格相去甚远——例如,除非它们有副作用,否则触发回调是没有意义的。此外,它是使用可变数组实现的。在我看来,在 ClojureScript 中,需要能够进行事件驱动编程才能做任何有用的事情。现在,我知道 Google Closure 已经实现了一个事件库,但我的问题是关于本地实现它。

由于所有基本的 Clojure/ClojureScript 数据类型都是不可变的,那么实现这种机制的惯用方式是什么?更改参考?求助于来自主机的可变数据结构(Java 和 JavaScript)?

如果我理解正确,代理可能是 Clojure 中的正确工具,但我看到它们目前没有在 ClojureScript 中实现。

0 投票
2 回答
396 浏览

google-closure-compiler - ClojureScript extern 'on' 事件

我正在尝试将 Twitter Bootstrap 的模态对话框 jQuery 插件与 ClojureScript 一起使用,该插件无需高级优化即可正常工作,但是当 Google Closure 处理方法名称时,该on方法变为za.

我一直在尝试on通过使用 externs 文件来防止被修改,但到目前为止,创建一个修复此问题的定义还没有运气。提示?