Я изучаю, как работает Clojurescript, пытаясь нарисовать некоторые сетки из структуры JSON, используя d3.js. Я использую 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 сетки. Я пытаюсь добавить значения в ячейки, такие как координаты высоты, ширины, х и у, так что тогда это просто простой случай передачи данных в 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
Изучите возможности 'strokes' немного больше. Похоже, что он использует библиотеку ['mrhyde'] (https://github.com/dribnet/mrhyde), которая позволяет использовать структуры данных clj более легко с помощью кода javascript. Возможно, вам даже не понадобится последний шаг 'js-> clj'! –
Я действительно отскакивал между «штрихами» и «c2», и в настоящее время я преимущественно использую 'c2', так как он обеспечивает очень приятную функциональность с помощью' bind! '... – toofarsideways