我正在學習Clojurescript如何運作,試圖使用d3.js. JSON結構得出一些與電網工作突變我正在使用strokes訪問d3。在Clojurescript
的JSON看起來是這樣的:
[[{"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}},
{"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}}],
[{"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}},
{"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}}],
[{"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}},
{"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}}],
[{"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}},
{"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}}]]
它代表了一個4×4的網格。我試圖給單元格添加值,例如高度,寬度,x和y座標,這樣只是將數據傳遞給d3來繪製的簡單情況。
例如,它會是這個樣子:
[[{"width":32,"height":32,"x":0,"y":0,"value":{"players":{"0":{"rep":0},"1":{"rep":0}}}},
{"width":32,"height":32,"x":32,"y":0,"value":{"players":{"0":{"rep":0},"1":{"rep":0}}}},...
通常我會在映射具有轉換功能的結構,細胞從當前值轉換成一種新的形式,但這種做法只是沒有按似乎沒有工作。我試過map-indexed: (map-indexed #(doto %2 (aset "width" %1)) row)
,但這似乎沒有正確轉換值。這很可能是我正在訪問或設置值不正確。
代碼的當前迭代看起來是這樣的:
(defn board->grid [grid-width grid-height board square]
(let [x-length (count board)
y-length (count (first board))
same (min (/ grid-width x-length) (/ grid-height y-length))
grid-item-width (if square same (/ grid-width x-length))
grid-item-height (if square same (/ grid-height y-length))
start-x (/ grid-item-width 2)
start-y (/ grid-item-height 2)
values (array)
grid (array)
data (js->clj board :keywordize-keys true)]
(doseq [x (range x-length)
y (range y-length)]
(let [current-cell (aget data y x)]
(.log js/console (apply str (aset (aget data y x) "a" "b")))
(.push grid (aget data y x))))
(.text ($ :#status) grid)))
任何幫助,將不勝感激!或者更好的是,更好的方法的建議,我不禁感到我正在做這個有點錯誤!
謝謝!我會做你的建議,感覺最自然! – toofarsideways
更多地研究「筆畫」的功能。它看起來像使用['mrhyde'](https://github.com/dribnet/mrhyde)庫,它允許通過javascript代碼更容易地使用clj數據結構。你甚至可能不需要最後的'js-> clj'步驟! –
我實際上在'strokes'和'c2'之間反彈,而我目前主要使用'c2',因爲它通過'bind!'提供了非常好的功能...... – toofarsideways