0

値が 0 または 1 のこのグリッドがあるとします。

(def grid [[1 0 1]
           [1 0 0]
           [1 0 1]])

gridここで、リスト内包表記を使用して、HTML Hiccup のような形式に変換したいと考えています。

(defn cell-component [is-it-1 key]
  ^{:key key} [:td (if (= is-it-1 1) {:class "is-it-1"})])


(defn grid-html []
  ([:table
   [:tbody
   (for [row grid]
      ^{:key row} [:tr 
                      (for [cell row]
                      (cell-component cell how-i-can-generate-a-index?))])]]))

unique indexテーブルは正しく生成されますが、を作成する方法がわかりませんtd。どうhow-i-can-generate-a-index?あるべきですか?

4

3 に答える 3

2

あなたの場合、各セルは行内のインデックスによって一意に識別されます。また、コンポーネントではなく親構造で子のキーを指定する方が自然です。

(defn cell-component [is-it-1]
  [:td (if (= is-it-1 1) {:class "is-it-1"})])

(for [[i cell] (map-indexed vector row)]
  ^{:key i} [cell-component cell])

同様に、インデックスベースのキーを行に割り当てる必要があることに注意して^{:key row}ください。テーブルに重複する行がある場合は機能しません。

于 2016-12-03T13:05:21.777 に答える
0

あなたは単に呼び出す必要がありますgensym

(cell-component cell (gensym))

それはそれを行う一般的な方法です。ただし、通常は、独自の差別化をすでに提供しているデータ内の属性を見つける方が適切です。

数字を 0 から数えて表示したい場合は、独自のシーケンス ジェネレーターを作成できます。

(def uniq-key (atom -1))
(defn gen-key []
  (swap! uniq-key inc)) 

上記の場合、最初に呼び出した(gen-key)ときは 0 が返され、2 回目は 1 などが返されます。

于 2016-12-03T11:00:14.667 に答える