标签: clojurescript

clojure - if-let语法

我正在尝试重构此代码以使用if-let:

om/IWillMount
  (will-mount [_]
    (go (while true
          (if (om/get-state owner :is-loaded)
            (let [updated-world (<! (update-world (:dimensions opts) (:world @data)))]
              (om/transact! data #(assoc % :world updated-world))
              (swap! app-state assoc :world updated-world))
            (let [world (<! (get-world (:dimensions opts)))]
              (om/set-state! owner :is-loaded true)
              (om/transact! data #(assoc % :world world))
              (swap! app-state assoc :world world)))
          (<! (timeout (:poll-interval opts))))))
Run Code Online (Sandbox Code Playgroud)

到目前为止,我试过这个:

om/IWillMount
  (will-mount [_]
    (go (while true
          (if-let [world (om/get-state owner :is-loaded)]
                    (<! (update-world (:dimensions opts) (:world @data)))
                    (<! (get-world (:dimensions opts)))
              (om/set-state! …
Run Code Online (Sandbox Code Playgroud)

clojure clojurescript

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

在 Clojurescript 中,如何更改网页的标题?

我想使用 Clojurescript 更改浏览器中页面的标题。我正在使用 Google Closure 进行 dom 操作,我对 Closure 中的函数持开放态度来执行此操作。

在纯 javascript 中,你可以这样做:

window.document.title = "pants";
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚它是如何转化为 Clojurescript 的。

google-closure clojurescript

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

如何实现JSONP调用

让我先说一下我对ClojureScript还是一个新手.

我正在尝试解析已关闭CORS的API.我唯一的选择是使用JSONP请求.但我不知道如何做到这一点.据我了解JSONP,它是返回回调脚本的服务器.

如何在ClojureScript中实现它?我有这个我尝试使用的片段:

(defn get-json [url callback]
  (xhr/send url callback "GET"))

(defn logcallback [event]
  (let [response (.-target event)]
    (.log js/console (response))))

(get-json ("http://www.apiurl.com/method")
           logcallback)
Run Code Online (Sandbox Code Playgroud)

但我仍然收到Origin "localhost:3449" is not allowed(CORS)错误.我想这不是一个真正的JSONP请求.我怎么会这样做?

jsonp clojurescript

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

ClojureScript cljsbuild在没有优化的情况下不会加载依赖项

我想在我的ClojureScript构建中使用figwheel.

lein cljsbuild auto已经合作,但我必须把它:optimisations :whitespace.

否则我在浏览器中收到一条消息:

Uncaught ReferenceError: goog is not defined
Run Code Online (Sandbox Code Playgroud)

然而,figwheel需要:optimisations :none运行.这是我的leiningen文件的一部分:

:cljsbuild {
          :builds
          [{:id "dev"
            :source-paths ["src/cljs"]

            :figwheel { :websocket-host "localhost"
                       ;;:on-jsload "example.core/fig-reload"
                       :autoload true
                       :heads-up-display true
                       :load-warninged-code true
                       ;;:url-rewriter "example.core/fig-url-rewrite"
                       }

            :compiler {;; :main
                       :output-to  "resources/public/js/gdb/gdb.js"
                       :output-dir "resources/public/js/gdb/cljsbuild-dev"
                       ;;:asset-path "js/out"

                       :optimizations :none
                       :source-map "resources/public/js/gdb/gdb.js.map"
                       :pretty-print true}}]}
Run Code Online (Sandbox Code Playgroud)

我缺少什么来获取缺少的依赖项?

google-closure-compiler leiningen clojurescript figwheel

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

为什么试剂不会在状态改变时重新渲染我的试剂形式

我需要创建一个包含选择字段的表单,其中的选项取决于当前可用的邮件帐户。页面加载后,我在 API 请求中检索这些邮件帐户。

以下函数使用 select 元素创建表单。

(defn create-options [mail-accounts]
  (for [m mail-accounts]
    [:option {:key (keyword (str (:id m)))
              :value (:id m)}
     (:name m)]))

(defn render-mail-account-select [mail-accounts]
  (let [form-state (r/atom {})]
    (fn [mail-accounts]
      (let [form [:form.mailing-form.form-horizontal
                  (into [:select.form-control {:field :list :id :mail-account}]
                        (create-options mail-accounts))]]
        (pprint form)
        [bind-fields form form-state]))))
Run Code Online (Sandbox Code Playgroud)

pprint给了我以下输出:

;; Before the mail-accounts are loaded
[:select.form-control {:field :list, :id :mail-account}]

;; After the state update containing the mail accounts
[:select.form-control
 {:field :list, :id :mail-account}
 [:option {:key :24, :value …
Run Code Online (Sandbox Code Playgroud)

clojurescript reagent reagent-forms

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

Clojure:when-let的快捷方式

通过以下结构,可以进行真值测试(f1)并将结果保存到本地绑定变量a.如果真值测试是假的,整个表达式返回nil.如果它是真实的(不是假的),则将返回的值传递给第二个函数(f2)并返回它的结果.

(when-let [a (f1)]
   (f2 a))
Run Code Online (Sandbox Code Playgroud)

有捷径吗?我不需要变量a作为中间步骤.

functional-programming clojure clojurescript

1
推荐指数
2
解决办法
79
查看次数

`iterate`和`repeated`之间的区别

我是clojure/clojurescript的新手,并试图找出为什么这个函数总是返回100作为第一个随机整数和最后几个零:

(take 10 (iterate rand-int 100))
;; (100 30 19 15 4 3 2 0 0 0)
Run Code Online (Sandbox Code Playgroud)

但这可以按预期工作:

(take 10 (repeatedly #(rand-int 100)))
;; (14 14 16 92 10 69 85 74 65 95)
Run Code Online (Sandbox Code Playgroud)

但是如果我使用匿名fn,iterate我得到nil第一个值,但其余的看起来没问题:

(take 10 (iterate #(rand-int 100)))
;; (nil 27 19 76 70 40 63 72 32 55)
Run Code Online (Sandbox Code Playgroud)

clojure clojurescript

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

如何从 ClojureScript 中的 &lt;input type='file' .../&gt; 获取文件

我正在尝试在输入字段中获取图像文件,但我无法做到。这是代码:

:on-change (fn [_]
             (this-as this
               (println "Files: " (.-files this))))
Run Code Online (Sandbox Code Playgroud)

(.-files this)返回nil

有任何想法吗?

PS:我想把这张图片上传到我的服务器。

clojure clojurescript

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

在Clojure中对地图矢量进行排序和排序的更清洁方法?

我有一个地图矢量,其中我需要删除名称键的值是重复的地图,保持具有最高年龄值的地图.我有一个解决方案,但我认为它看起来不干净.有没有更好的方法来实现它而不将其分解为多个功能?

这是我的数据:

(def my-maps
    [{:name "jess", :age 32} 
     {:name "ruxpin", :age 4} 
     {:name "jess", :age 35} 
     {:name "aero", :age 33} 
     {:name "banner", :age 4}])
Run Code Online (Sandbox Code Playgroud)

这是我的解决方案:

(map first (vals (group-by :name (reverse (sort-by :name my-maps)))))
Run Code Online (Sandbox Code Playgroud)

结果:

({:name "ruxpin", :age 4} {:name "jess", :age 35} {:name "banner", :age 4} {:name "aero", :age 33})
Run Code Online (Sandbox Code Playgroud)

clojure clojurescript

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

简单的 Clojurescript 形式

我正在使用 Reagent 和 CLJS,熟悉 React 和 Clojure,不太熟悉 CLJS。我想做一个简单的表单,但在 CLJS 中对我来说并不明显。

(defn form []
  [:div
   [:input {:type "text" :name "first-name" :id "first-name"}]
    [:button  {:on-click (fn [e] (test-func "hello"))}
  "Click me!"]
])
Run Code Online (Sandbox Code Playgroud)

我想获取该输入的值,并在单击按钮时将其传递给函数。我如何将该输入的值放入我的on-click函数中?

clojure hiccup clojurescript reagent

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