标签: clojurescript

为什么多方法不能用作Reagent/Re-frame的功能?

在我正在构建的小应用程序中使用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 clojurescript reagent re-frame

19
推荐指数
2
解决办法
1412
查看次数

Clojure中def和defonce有什么区别?

Clojure中defdefonce有什么区别?

当使用高清超过defonce反之亦然?

lisp functional-programming clojure clojurescript

19
推荐指数
2
解决办法
3390
查看次数

ClojureScript的客户端MVC框架

我正在尝试在ClojureScript中为客户端MVC选择一个库.这是我到目前为止找到的ClojureScript库:

  1. WebFUI(https://github.com/drcode/webfui)
  2. Enfocus:(http://ckirkendall.github.io/enfocus-site/)
  3. 基座(http://pedestal.io)
  4. Ducttape(https://github.com/hozumi/ducttape.cljs)
  5. C2(http://keminglabs.com/c2/)似乎这可以用作DOM框架.

我该如何在它们之间做出选择?此外,他们将如何与使用ClojureScript的AngularJS或Backbone进行比较?

backbone.js clojurescript angularjs pedestal

18
推荐指数
2
解决办法
4114
查看次数

试剂:组件安装

我正在尝试将初始焦点设置在输入元素上

(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)

这不适合我.我究竟做错了什么?

clojurescript reactjs reagent

18
推荐指数
2
解决办法
4068
查看次数

Clojure <> ClojureScript; 例如:"格式"功能

在Clojure中有一个非常方便的函数,它被称为format.众所周知,它能够轻松模拟字符串.该功能通常在大多数编程语言中可用.

我发现ClojureScript没有实现这个功能,我有点恼火.据我所知,它是在旧版本中实现的,但最新版本不包含该功能.

谁知道这是否有原因?

clojure clojurescript

18
推荐指数
2
解决办法
5877
查看次数

如何访问:原因,:via和:Clojure中异常的跟踪键?

我找不到访问: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

18
推荐指数
1
解决办法
1887
查看次数

什么IDE,编辑器和工具可用于ClojureScript开发?

自ClojureScript首次发布以来已经过去了一年.我没有在生产中使用ClojureScript,但我正在考虑在即将开展的项目中使用该技术.什么是IDE的当前状态和ClojureScript的工具支持.以下是IDE,编辑器和工具,我知道:

此列表中可能缺少一些项目或工具.我没有看到任何与主要IDE之一的集成,我可以想象大多数使用ClojureScript的人都在使用Emacs.我使用Emacs很好,但不是每个开发人员都喜欢使用Emacs的想法.此列表中是否缺少任何工具或IDE扩展,甚至可能是在大型项目中使用的工具?

ide clojure clojurescript

17
推荐指数
1
解决办法
3988
查看次数

哪个更快,Clojure或ClojureScript(以及为什么)?

如果我不得不猜测,我很确定答案是Clojure,但我不确定为什么.逻辑上(对我而言)看起来ClojureScript应该更快:

两者都是"动态的",但是ClojureScript

  • 编译为JavaScript,在V8上运行
  • V8引擎可以说是最快的动态语言引擎
  • V8是用C语言编写的

而Clojure:

  • 也是动态的
  • 在JVM中运行,它没有内置的动态支持,因此我认为JVM必须做V8正在做的任何事情,以启用动态支持
  • 而Java比C慢

那么Clojure如何比ClojureScript更快?当说JavaScript是动态的并且Clojure是动态的时,"动态"是否意味着不同的东西?我没看到什么?

(当然,如果ClojureScript 确实快,然后是上面的推理是否正确?)

我想,Clojure编译成什么......至少是问题的一部分.我知道JVM部分不能只是一个普通的解释器(否则ClojureScript会更快),但是Clojure无法编译成常规字节码,因为JVM中没有"动态".那么ClojureScript的编译/执行方式与Clojure的编译/执行方式之间有什么区别?Java是如何编译/执行的,以及各自隐含的性能差异?

v8 clojure clojurescript

17
推荐指数
2
解决办法
6267
查看次数

是否有一个在线工具来自动缩进和格式化Clojure代码,就像JSON有很多?

网上有很多工具采用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)

clojure clojurescript

17
推荐指数
3
解决办法
5060
查看次数

为什么NodeList/HtmlCollection不是seqable?

作为Clojurescript的新手,在我看来,每个Clojurescript项目都会有一些代码片段,如下所示:

(extend-type js/NodeList
  ISeqable
  (-seq [array] (array-seq array 0)))
Run Code Online (Sandbox Code Playgroud)

为什么不是核心库的这一部分?

clojurescript

17
推荐指数
1
解决办法
2252
查看次数