我想在ClojureScript函数中的Reagent表单中添加一个“自动保存”功能。在Clojure中,我通常用ScheduledExecutorService
做一些东西。由于这在ClojureScript中不可用,因此我提出了以下建议。
(def delay-handle (atom nil))
(defn clear-autosave-delay! []
(.clearTimeout js/window @delay-handle))
(defn start-autosave-delay!
[doc-save-fn delay-ms page-map-atom]
(reset! delay-handle (.setTimeout js/window doc-save-fn delay-ms page-map-atom)))
(defn change-watcher!
[doc-save-fn page-map-atom]
(let [delay (* 1000 (get-in @page-map-atom [:options :editor_autosave_interval]))]
(when (pos? delay)
(clear-autosave-delay!)
(start-autosave-delay! doc-save-fn delay page-map-atom))))
我将change-watcher!
函数放在输入控件的代理:on-change
处理程序中。无论何时发生更改,它都会重置延迟。如果延迟过期,则调用doc-save-fn
进行保存。
它看起来工作正常,但不是很“Clojuresque”。有没有更常用的方式来写这篇文章呢?
发布于 2018-08-26 19:07:36
使用去保释器解决此问题。它非常简单,并且做同样的事情
(goog.functions.debounce auto-save-action 1000)
https://stackoverflow.com/questions/51661320
复制相似问题