使用if boolean变量在clojurescript中切换行类

时间:2017-03-29 14:41:35

标签: clojurescript reagent

如何在列表中使用clojurescript切换li类,当@switchvar为true时,所有奇数行都应该是活动的,在另一种情况下偶数行应该是活动的

我尝试了if语句,没有任何反应。

(defn listitems [items]
  [:ul
   (for [item items]
     ^{:key item} [:li {:class 
        (if (@switchvar true) 
            ((odd? item) "active") 
            ((even? item) "active") ) 
      } "Item " item ])])

3 个答案:

答案 0 :(得分:0)

您的if语句似乎不正确。你可以这样做:

[:ul (map #(-> [:li {:class %2} "item" %1]) 
          items 
          (cycle ["active" "non-active"]))]

答案 1 :(得分:0)

您正在调用switchvar原子内的函数,并将其作为true作为参数。最好只是deref(@):

(defn listitems [items]
  [:ul
   (for [item items
         idx (range (count items))]
     ^{:key item} [:li {:class
                        (if (and (odd? idx) (odd? @switchvar))
                          "active"
                          "inactive")
                        } "Item " item])])

我进行了更改,以便每个列表项都有不同的idx。因此,@switchvaridx都可以更改。我希望您可以更改此代码以满足您的确切需求。

答案 2 :(得分:0)

谢谢@ all,我用你的提示开始了一个很好的开始。 switchvar实际上是布尔值。我改变了第一个"不活动"到另一个if子句。

(defn lister-items2 [items]
  [:ul
   (for [item items ]
     ^{:key item} [:li {:class
                    (if (and (odd? item) (true? @switchvar))
                      "active"
                      (if (and (even? item) (false? @switchvar))
                        "active"
                        "inactive"))
                    } "Item " item])])