ClojureScript中的“自动保存”功能

时间:2018-08-02 20:01:51

标签: clojurescript

我想在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!函数放在用于输入控件的Reagent :on-change处理程序中。每当发生更改时,它将重置延迟。如果延迟到期,将调用doc-save-fn进行保存。

这似乎还可以,但不是很“ Clojuresque”。有没有更惯用的方式写这个?

1 个答案:

答案 0 :(得分:1)

使用去抖动器解决此问题。这很简单,并且可以完成

  <ListPerspective>
      Click the &times; button to remove a message
  </ListPerspective>