Я пытаюсь извлечь целое число из localStorage с помощью простого приложения на языке clojurescript. Все, что я пробовал, заканчивалось тем, что пыталось иметь неправильное поведение.
Ниже моя программа без инициализации из локального хранилища. Я проигнорирую случай с ключом не найден, так как у меня есть версия JQuery, которая обрабатывает это, чтобы заполнить хранилище. Кроме того, приложение JQuery считывает сохраненные данные ClojureScript в localStorage. Так что это работает для меня.
Краткое резюме это. Я сообщаю: «С момента последнего инцидента прошло $ число дней». Число $ находится в div с именем «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 () для него. Но это и .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} вернуть a}}, если быть точным.
(defn initial-state [] (.toNumber
(integer/fromString (.getItem (.localStorage (dom/getWindow)) "count"))))
Кажется, что Clojure использует класс Integer java для приведения из строки в int даже до того, что бросил (int "1"), чтобы идея была реализована.
Я также пытался вызвать parseInt () javascript. Вот как я это делаю в версии JQuery. Однако вызов ClojureScript всегда возвращает 1. Даже если моя версия JQuery хранит 8, о чем свидетельствуют инструменты разработчика Chrome.
(defn initial-state []
(.parseInt (dom/getWindow)
(.getItem (.localStorage (dom/getWindow)) "count")))
Есть идеи, как заставить это строковое значение вести себя как целое число? Это должно быть просто, но я ничего не получаю.