4

我目前正在尝试重新实现todo 示例应用程序以了解它的工作原理,并且在加载页面时出现错误。我不确定如何从这里出发。我担心的是错误似乎在cljs.core.

todo-app.simulated.services.receive_messages = (function receive_messages(app){
  return io.pedestal.app.protocols.put_message.call(null,(new cljs.core.Keyword("\uFDD0:input")).call(null,app),cljs.core.PersistentArrayMap.fromArray([io.pedestal.app.messages.type,"\uFDD0:create-todo",io.pedestal.app.messages.topic,cljs.core.PersistentVector.fromArray(["\uFDD0:todo"], true)], true));
});

异常消息是:

Uncaught TypeError: Object function (meta,cnt,arr,__hash){
this.meta = meta;
this.cnt = cnt;
this.arr = arr;
this.__hash = __hash;
this.cljs$lang$protocol_mask$partition1$ = 4;
this.cljs$lang$protocol_mask$partition0$ = 16123663;
} has no method 'fromArray'

我的依赖是:

[[org.clojure/clojure "1.5.1"]
 [org.clojure/clojurescript "0.0-1820"]
 [domina "1.0.1"]
 [ch.qos.logback/logback-classic "1.0.7" :exclusions [org.slf4j/slf4j-api]]
 [io.pedestal/pedestal.app "0.1.9"]
 [io.pedestal/pedestal.app-tools "0.1.9"]]

任何帮助或见解将不胜感激!

4

2 回答 2

1

正如bostonou 所建议的,最好的方法是删除out目录。我目前的方法是使用lein-cljsbuild,我个人通过将其添加到我的用户配置文件中来做到这一点。

您可以致电nano ~/.lein/profiles.clj

我的目前看起来像:

{:user {:plugins [[lein-difftest "2.0.0"]
                  [lein-marginalia "0.7.1"]
                  [lein-pprint "1.1.1"]
                  [lein-swank "1.4.4"]
                  [lein-catnip "0.5.1"]
                  [environ/environ.lein "0.3.0"]
                  [lein-cljsbuild "0.3.2"]]
        :hooks [environ.leiningen.hooks]}}

您现在可以通过lein-cljsbuild once在项目文件夹中调用来自动构建 cljs 文件。调用lein-cljsbuild auto可确保在编辑源文件时自动编译它们。

我目前还添加:hooks [leiningen.cljsbuild]到我的project.clj以便调用lein clean也将删除由lein-cljsbuild.

于 2013-08-22T13:08:30.993 回答
1

我也看到了这个错误,它似乎不知从何而来。清除out/目录(:target-path在你的project.clj)为我修复了它。基于此,我认为 cljs 编译过程和/或基座存在一些脱节。

这个问题看起来很相似,修复也很相似,所以我认为这是一个 cljs 构建问题。

一般来说,关于基座调试,我没有什么可提供的,但如果我看到一个似乎在核心库中的错误,我会从假设我的结果有问题开始。:)

编辑

更多信息,建议out\每次升级 ClojureScript 或 Pedestal 时删除该目录。

于 2013-07-16T19:01:25.150 回答