在我正在构建的小应用程序中使用Reagent和Re-frame我正在使用多方法来调度哪个页面应该根据app状态中的值显示:
(defmulti pages :name)
(defn main-panel []
(let [current-route (re-frame/subscribe [:current-route])]
(fn []
;...
(pages @current-route))))
Run Code Online (Sandbox Code Playgroud)
然后我有方法,如:
(defmethod layout/pages :register [_] [register-page])
Run Code Online (Sandbox Code Playgroud)
在register-page功能会产生实际的观点:
(defn register-page []
(let [registration-form (re-frame/subscribe [:registration-form])]
(fn []
[:div
[:h1 "Register"]
;...
])))
Run Code Online (Sandbox Code Playgroud)
我尝试更改我的应用程序,以便方法直接生成页面,如:
(defmethod layout/pages :register [_]
(let [registration-form (re-frame/subscribe [:registration-form])]
(fn []
[:div
[:h1 "Register"]
;...
])))
Run Code Online (Sandbox Code Playgroud)
这导致没有任何页面被渲染.在我的主面板中,我将调用更改pages为方括号,以便Reagent可以看到它:
(defn main-panel []
(let [current-route (re-frame/subscribe [:current-route])]
(fn []
;...
[pages @current-route])))
Run Code Online (Sandbox Code Playgroud)
这导致第一个访问过的页面工作,但在此之后,单击链接(导致当前路由更改)无效.
在首先加载的文件中需要定义各个方法的所有命名空间,其中包含init函数,以及我可以选择任何单个页面并显示它的事实证明代码正在加载(然后,切换到另一个页面没有工作):
https://github.com/carouselapps/ninjatools/blob/master/src/cljs/ninjatools/core.cljs#L8-L12
在努力调试这是怎么回事,我定义了两个路线,:about以及 …
Clojure中def和defonce有什么区别?
当使用高清超过defonce反之亦然?
我正在尝试在ClojureScript中为客户端MVC选择一个库.这是我到目前为止找到的ClojureScript库:
我该如何在它们之间做出选择?此外,他们将如何与使用ClojureScript的AngularJS或Backbone进行比较?
我正在尝试将初始焦点设置在输入元素上
(defn initial-focus-wrapper [element]
(with-meta element
{:component-did-mount #(.focus (reagent/dom-node %))}))
(defn chat-input []
(fn []
[initial-focus-wrapper
[:input {:type "text"}]]))
Run Code Online (Sandbox Code Playgroud)
这不适合我.我究竟做错了什么?
在Clojure中有一个非常方便的函数,它被称为format.众所周知,它能够轻松模拟字符串.该功能通常在大多数编程语言中可用.
我发现ClojureScript没有实现这个功能,我有点恼火.据我所知,它是在旧版本中实现的,但最新版本不包含该功能.
谁知道这是否有原因?
我找不到访问:cause, :via and :trace异常密钥的方法.
这是代码:
(try
(throw (IllegalArgumentException. "1"))
(catch Exception e
e))
Run Code Online (Sandbox Code Playgroud)
输出:
#error{:cause "1",
:via [{:type java.lang.IllegalArgumentException, :message "1", :at [user$eval4073 invokeStatic "form-init5592296091748814678.clj" 1]}],
:trace [[user$eval4073 invokeStatic "form-init5592296091748814678.clj" 1]
[user$eval4073 invoke "form-init5592296091748814678.clj" 1]
[clojure.lang.Compiler eval "Compiler.java" 6927]
[clojure.lang.Compiler eval "Compiler.java" 6890]
[clojure.core$eval invokeStatic "core.clj" 3105]
[clojure.core$eval invoke "core.clj" 3101]
[clojure.main$repl$read_eval_print__7408$fn__7411 invoke "main.clj" 240]
....]}
Run Code Online (Sandbox Code Playgroud)
PS :(:通过e)不起作用.
lisp error-handling functional-programming clojure clojurescript
自ClojureScript首次发布以来已经过去了一年.我没有在生产中使用ClojureScript,但我正在考虑在即将开展的项目中使用该技术.什么是IDE的当前状态和ClojureScript的工具支持.以下是IDE,编辑器和工具,我知道:
此列表中可能缺少一些项目或工具.我没有看到任何与主要IDE之一的集成,我可以想象大多数使用ClojureScript的人都在使用Emacs.我使用Emacs很好,但不是每个开发人员都喜欢使用Emacs的想法.此列表中是否缺少任何工具或IDE扩展,甚至可能是在大型项目中使用的工具?
如果我不得不猜测,我很确定答案是Clojure,但我不确定为什么.逻辑上(对我而言)看起来ClojureScript应该更快:
两者都是"动态的",但是ClojureScript
而Clojure:
那么Clojure如何比ClojureScript更快?当说JavaScript是动态的并且Clojure是动态的时,"动态"是否意味着不同的东西?我没看到什么?
(当然,如果ClojureScript 是确实快,然后是上面的推理是否正确?)
我想,Clojure编译成什么......至少是问题的一部分.我知道JVM部分不能只是一个普通的解释器(否则ClojureScript会更快),但是Clojure无法编译成常规字节码,因为JVM中没有"动态".那么ClojureScript的编译/执行方式与Clojure的编译/执行方式之间有什么区别?Java是如何编译/执行的,以及各自隐含的性能差异?
网上有很多工具采用JSON文本,并显示格式化和缩进格式相同.
有些甚至更进一步,形成一个漂亮的树状结构:http://jsonviewer.stack.hu/
我们对Clojure代码有类似的东西吗?
或者至少可以自动缩进的东西.
如果我的文字是这样的:
(defn prime? [n known](loop [cnt (dec (count known)) acc []](if (< cnt 0) (not (any? acc))
(recur (dec cnt) (concat acc [(zero? (mod n (nth known cnt)))])))))
Run Code Online (Sandbox Code Playgroud)
它应该自动缩进到这样的东西:
(defn prime? [n known]
(loop [cnt (dec (count known)) acc []]
(if (< cnt 0) (not (any? acc))
(recur (dec cnt) (concat acc [(zero? (mod n (nth known cnt)))])))))
Run Code Online (Sandbox Code Playgroud) 作为Clojurescript的新手,在我看来,每个Clojurescript项目都会有一些代码片段,如下所示:
(extend-type js/NodeList
ISeqable
(-seq [array] (array-seq array 0)))
Run Code Online (Sandbox Code Playgroud)
为什么不是核心库的这一部分?