単純なclojurescriptアプリを使用してlocalStorageから整数を取得しようとしています。私が試したものはすべて、ある種の間違った動作をします。
以下は、ローカルストレージから初期化しない私のプログラムです。ストレージを準備するためにそれを処理するJQueryバージョンがあるので、キーが見つからない場合は無視します。また、JQueryアプリはClojureScriptがlocalStorageに保存したものを正常に読み取ります。だからそれは私のために働いています。
簡単な要約はこれです。「前回のインシデントから$number日が経過しました」というメッセージが表示されます。$numberは「counter」という名前のdivにあります。ボタンが3つあります。1つはカウントをインクリメントし、1つはカウントをデクリメントし、最後はカウントをゼロにリセットします。
(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}returna}}正確には。
(defn initial-state [] (.toNumber
(integer/fromString (.getItem (.localStorage (dom/getWindow)) "count"))))
Clojureは、javaのIntegerクラスを使用して、文字列からintにキャストし、(int "1")をスローして、アイデアが発砲されたようです。
また、javascriptのparseInt()を呼び出そうとしました。これは私がJQueryバージョンでそれを行う方法です。ただし、ClojureScript呼び出しは常に1を返します。Chromeの開発者ツールで証明されているように、私のJQueryバージョンが8を格納している場合でも。
(defn initial-state []
(.parseInt (dom/getWindow)
(.getItem (.localStorage (dom/getWindow)) "count")))
その文字列値を整数として動作させる方法はありますか?シンプルにする必要がありますが、どこにも行きません。