Опитвам се да извадя цяло число от localStorage с просто приложение clojurescript. Всичко, което опитах, в крайна сметка се опитах да има някакво грешно поведение.
По-долу е моята програма без инициализиране от локално хранилище. Ще игнорирам случая на ключ, който не е намерен, тъй като имам версия на JQuery, която обработва това, за да запълни хранилището. Освен това приложението JQuery чете добре записите на ClojureScript в localStorage. Така че това работи за мен.
Кратко резюме е това. Съобщението ми гласи „Има $number дни от последния инцидент“ $number е в 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() изглежда ми дадоха функция. функция (){if(this.e==-1)return-w(this).D();else{for(var a=0,b=1,d=0;d=0?e:Ua+ д)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")))
Някакви идеи как мога да накарам тази стойност на низ да се държи като цяло число? Трябва да е просто, но не стигам доникъде.