我正在尝试重构此代码以使用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) 我想使用 Clojurescript 更改浏览器中页面的标题。我正在使用 Google Closure 进行 dom 操作,我对 Closure 中的函数持开放态度来执行此操作。
在纯 javascript 中,你可以这样做:
window.document.title = "pants";
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚它是如何转化为 Clojurescript 的。
让我先说一下我对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请求.我怎么会这样做?
我想在我的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)
我缺少什么来获取缺少的依赖项?
我需要创建一个包含选择字段的表单,其中的选项取决于当前可用的邮件帐户。页面加载后,我在 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) 通过以下结构,可以进行真值测试(f1)并将结果保存到本地绑定变量a.如果真值测试是假的,整个表达式返回nil.如果它是真实的(不是假的),则将返回的值传递给第二个函数(f2)并返回它的结果.
(when-let [a (f1)]
(f2 a))
Run Code Online (Sandbox Code Playgroud)
有捷径吗?我不需要变量a作为中间步骤.
我是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) 我正在尝试在输入字段中获取图像文件,但我无法做到。这是代码:
:on-change (fn [_]
(this-as this
(println "Files: " (.-files this))))
Run Code Online (Sandbox Code Playgroud)
但(.-files this)返回nil。
有任何想法吗?
PS:我想把这张图片上传到我的服务器。
我有一个地图矢量,其中我需要删除名称键的值是重复的地图,保持具有最高年龄值的地图.我有一个解决方案,但我认为它看起来不干净.有没有更好的方法来实现它而不将其分解为多个功能?
这是我的数据:
(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) 我正在使用 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函数中?