考虑以下使用幽灵,试剂和重构框架的clojurescript代码,外部React.js网格组件用作视图组件.
在db.cls中:
(def default-db
{:cats [{:id 0 :data {:text "ROOT" :test 17} :prev nil :par nil}
{:id 1 :data {:text "Objects" :test 27} :prev nil :par 0}
{:id 2 :data {:text "Version" :test 37} :prev nil :par 1}
{:id 3 :data {:text "X1" :test 47} :prev nil :par 2}]})
Run Code Online (Sandbox Code Playgroud)
在subs.cls中
(register-sub
:cats
(fn [db]
(reaction
(select [ALL :data] (t/tree-visitor (get @db :cats))))))
Run Code Online (Sandbox Code Playgroud)
选择结果:
[{:text "ROOT", :test 17}
{:text "Objects", :test 27}
{:text "Version", :test 37}
{:text "X1", :test 47}]
Run Code Online (Sandbox Code Playgroud)
在views.cls中 …
设置考虑以下DataScript数据库的电影和演员,数据从learndatalogtoday.org窃取:以下代码可以在JVM/Clojure REPL或ClojureScript REPL中执行,只要project.clj包含[datascript "0.15.0"]作为依赖项.
(ns user
(:require [datascript.core :as d]))
(def data
[["First Blood" ["Sylvester Stallone" "Brian Dennehy" "Richard Crenna"]]
["Terminator 2: Judgment Day" ["Linda Hamilton" "Arnold Schwarzenegger" "Edward Furlong" "Robert Patrick"]]
["The Terminator" ["Arnold Schwarzenegger" "Linda Hamilton" "Michael Biehn"]]
["Rambo III" ["Richard Crenna" "Sylvester Stallone" "Marc de Jonge"]]
["Predator 2" ["Gary Busey" "Danny Glover" "Ruben Blades"]]
["Lethal Weapon" ["Gary Busey" "Mel Gibson" "Danny Glover"]]
["Lethal Weapon 2" ["Mel Gibson" "Joe Pesci" "Danny …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
re-frame ×2
reagent ×2
cursive ×1
datalog ×1
datascript ×1
datomic ×1
idioms ×1
lisp ×1
om ×1
reactjs ×1
unit-testing ×1