2017-03-29 28 views
1

如何在clojurescript列表中切换li类,当@switchvar为true时,所有奇数行都应该是有效的,在另一种情况下偶数行应该是有效的clojurescript中的开关线类如果为布尔变量

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

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

回答

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都可以改变。我希望你可以修改这些代码以适应你的确切需求。

+0

好的,我更了解一点。但是,当switchvar更改时,我想切换甚至是奇怪的主动事物。在“主动”的行中,我会做类似((奇数?项)“主动”)和非主动((偶数?项)“主动”) – bluelemonade

+0

我做了一个改变,以介绍'idx'。你应该注意像'((odd?item)“active”)'这样的代码没有意义,因为'odd?'是一个返回布尔值的函数 - 然后你的代码调用该布尔值。你不能调用布尔值。你可以调用奇怪的东西,如地图和关键字(他们作为函数),但你不能调用布尔值。 –

0

你的if语句看起来不正确。你可以做这样的事情:

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

这个开关奇数和偶数的元素,我想改变活动和非活动类 – bluelemonade

+0

好了。查看我的更新。 – akond

+0

好的,我试着去了解。我的for循环和if语句的问题在哪里? – bluelemonade

0

谢谢@所有,我用你的提示开始了一个很好的开始clojure。 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])])