我有一个用Clojure编写的桌面应用程序,它在很大程度上受到JVM启动时间的影响,非常适合ClojureScript.它作为JVM的jar文件提供,ClojureScript/JavaScript的等价物是什么?
这当然是微不足道的,但我无法在任何地方找到它.我正在尝试摆弄ClojureScript.我能够使用ClojureScript One获得ClojureScript REPL .
我可以连接浏览器并在那里执行一些简单的DOM查询和操作.现在我想开始将一些有用的函数保存到模块中并根据需要加载它们.这是我被卡住的地方.
如果我尝试类似的东西
(require 'project.dom)
Run Code Online (Sandbox Code Playgroud)
我得到了例外FileNotFoundException Could not locate project/dom__init.class or project/dom.clj on classpath.我确实只有project/dom.cljs,因为我看到示例中的所有ClojureScript文件都使用此扩展名.
如果我尝试将其重命名为project.clj,我会收到有关缺少命名空间的投诉js.当然,我在模块中使用了很多名称空间.
编写一个可以与浏览器一起使用并从REPL加载它的简单ClojureScript文件的正确方法是什么?能够运行这个简单示例的任何东西都可以:
(ns ^{:doc "A module for selecting elements from the DOM."}
project.dom)
(defn get
[selector]
(.querySelectorAll js/document selector))
Run Code Online (Sandbox Code Playgroud) 我想在clojure中定义自己的阅读器宏:
(read-string "ßfoo")
=> (some_func :foo)
Run Code Online (Sandbox Code Playgroud)
可能吗?
我试过使用with-precision但它不起作用:
(.log js/console (with-precision 2 1.2345))
Run Code Online (Sandbox Code Playgroud)
所以我用过toFixed:
(.log js/console (.toFixed 1.2345 2))
Run Code Online (Sandbox Code Playgroud)
但我觉得这不是那种惯用的做法.
另外,我不明白为什么with-precision不起作用.
请激励我......
我已经开发了Om/React组件,但是我觉得不能用单元测试来驱动我的开发.我试图设置我的clojurescript项目来对这些组件运行单元测试,到目前为止我已经达到了能够编写单元测试并实例化我的组件的程度.我缺少的是能够确保我的组件对某些事件做出正确反应,例如,onChange以便我可以模拟用户输入.
这是我的测试代码:
(defn simulate-click-event
"From https://github.com/levand/domina/blob/master/test/cljs/domina/test.cljs"
[el]
(let [document (.-document js/window)]
(cond
(.-click el) (.click el)
(.-createEvent document) (let [e (.createEvent document "MouseEvents")]
(.initMouseEvent e "click" true true
js/window 0 0 0 0 0
false false false false 0 nil)
(.dispatchEvent el e))
:default (throw "Unable to simulate click event"))))
(defn simulate-change-event
"From https://github.com/levand/domina/blob/master/test/cljs/domina/test.cljs"
[el]
(let [document (.-document js/window)]
(cond
(.-onChange el) (do (print "firing on change on " el) (.onChange el))
(.-createEvent document) (let [e (.createEvent document …Run Code Online (Sandbox Code Playgroud) 我似乎无法在Clojurescript cljs.core.PersistentQueue上找到任何文档.我应该使用它吗?或者我应该使用另一种制作Clojurescript队列的方法?
与此同时,我正在使用频道,(<!, (>!并使用块,这似乎可以解决问题
在Clojure中对函数进行别名的最惯用方法是什么?这两种方法在执行方面有什么不同吗?
从Om获取的示例(Clojurescript,但Clojure中的语法将是相同的):
(defn query->ast
"Given a query expression convert it into an AST."
[query-expr]
(parser/query->ast query-expr))
(def query->ast
"Given a query expression convert it into an AST."
parser/query->ast)
Run Code Online (Sandbox Code Playgroud) 如何创建一个新项目?如何编译,测试和运行?
由于草书用户指南没有提及cljs.
作为Clojure程序员,我们使用大量匿名函数而不考虑它的成本.
在clojure中创建和使用匿名函数的相对成本是多少?
我尝试在Google Chart中调整此示例.到re-frame框架,reagent.我想基于订阅创建一个实时图表.我用一个简单的计数器= + - 1测试.
我收到了错误: Assert failed: Render must be a function, not nil
(ifn? render-fun).
(defn draw-demo-chart
[d]
(let [[columns vectors options chart] (r/children d)
data (new js/google.visualization.DataTable)]
(doall ;gotta keep the doall on maps. lazy sequence...
(map (fn [[type name]]
(.addColumn data type name)) columns))
(.addRows data vectors)
(.draw chart data options)
(.load js/google "visualization" "1" (clj->js {:packages ["corechart" "orgchart" "calendar" "map" "geochart"]}))
(.setOnLoadCallback js/google draw-demo-chart)
))
(defn draw-demo-chart-container
[] …Run Code Online (Sandbox Code Playgroud) clojurescript ×10
clojure ×6
cursive ×1
idioms ×1
javascript ×1
lisp ×1
om ×1
re-frame ×1
reactjs ×1
reagent ×1
unit-testing ×1