2017-03-29 8 views
1

@switchvarがtrueの場合、clojurescriptを使用してリスト内のliクラスを切り替えるにはどうすればいいですか?偶数行がアクティブでなければなりません。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

ok、私はもう少し理解しています。しかし、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

Allright。私の更新を参照してください。 – akond

+0

よろしくお願いします。私のforループとif文の問題はどこですか? – bluelemonade

0

ありがとうございます@すべて、私はあなたのヒントと一緒に良いクロージャーを開始しました。 switchvarは実際にはbooleanです。最初の "非アクティブ"を別の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])]) 
関連する問題