Как я могу извлечь целое число из localstorage и привести его к целому с помощью clojurescript

Я пытаюсь вытащить целое число из localStorage с помощью простого приложения clojurescript. Все, что я пробовал, в итоге приводило к неправильному поведению.

Ниже представлена ​​моя программа без инициализации из локального хранилища. Я проигнорирую случай, когда ключ не найден, поскольку у меня есть версия JQuery, которая обрабатывает это для заполнения хранилища. Кроме того, приложение JQuery прекрасно считывает сохраненные файлы ClojureScript в localStorage. Так что у меня это работает.

Вот краткое изложение. В моем сообщении говорится: «С момента последнего инцидента было $ number дней». $ Number находится в блоке с именем «counter». У меня есть три кнопки; один увеличивает счетчик, один уменьшает счетчик, а последний сбрасывает счетчик до нуля.

 (ns days.core
        (:require [goog.events :as events]
                  [goog.string :as string]
                  [goog.math.Integer :as int]
                  [goog.dom :as dom]))
    (defn initial-state [] 0)
    (def count (atom (initial-state)))
    (defn set-counter [n]
       (do (.setItem (.localStorage (dom/getWindow)) "count" n)
           (dom/setTextContent (dom/getElement "counter") n)))
    (defn set-button-fn [button-id f-update]
       (events/listen (dom/getElement button-id)
                      "click"
                      (fn [] (do (f-update) (set-counter @count)))))
    (defn start-app []
       (do
           (set-counter @count)
           (set-button-fn "addDay" (fn [] (swap! count inc)))
           (set-button-fn "decDay" (fn [] (swap! count dec)))
           (set-button-fn "reset" (fn [] (reset! count 0)))))
    (start-app)

Когда я пытаюсь использовать goog.math.Integer.fromString () для преобразования в целое число, вызов inc добавит 1 в конце (7 пошли на 71 и 711). Вызов dec сделает то, что я ожидаю, уменьшит его численно (711 перешли к 710 и 709). Вот как я пытаюсь инициализировать это.

(defn initial-state []
  (integer/fromString (.getItem (.localStorage (dom/getWindow)) "count")))

Я понял, что это объект goog.math.Integer, поэтому я попытался вызвать для него .toNumber (). Но this и .toInt (), похоже, дали мне функцию. function () {if (this.e == - 1) return-w (this) .D (); else {for (var a = 0, b = 1, d = 0; d = 0? e: Ua + e) b; b = Ua} return a}}, если быть точным.

(defn initial-state [] (.toNumber 
  (integer/fromString (.getItem (.localStorage (dom/getWindow)) "count"))))

Clojure, похоже, использует класс Java Integer для преобразования строки в int даже до такой степени, что (int "1 ") throw, чтобы эта идея была реализована.

Я также пытался вызвать javascript-метод parseInt (). Вот как я это делаю в версии JQuery. Однако вызов ClojureScript всегда возвращает 1. Даже если в моей версии JQuery хранится 8, о чем свидетельствуют инструменты разработчика Chrome.

(defn initial-state []
  (.parseInt (dom/getWindow)
             (.getItem (.localStorage (dom/getWindow)) "count")))

Есть идеи, как я могу заставить это строковое значение вести себя как целое число? Это должно быть просто, но я никуда не денусь.

9
задан Ball 27 July 2011 в 02:18
поделиться