7
Ich begann gerade Om (eine reactjs basierte Bibliothek für ClojureScript) zu verwenden. Ich möchte eine Liste basierend auf Benutzereingaben filtern. Folgendes funktioniert aber die Lösung scheint zu kompliziert zu sein. Gibt es einen besseren?Wie filtert man eine Liste basierend auf Benutzereingaben mit ClojureScript und Om?
(ns om-tut.core
(:require-macros [cljs.core.async.macros :refer [go]])
(:require [om.core :as om :include-macros true]
[om.dom :as dom :include-macros true]
[clojure.string :as string]))
(enable-console-print!)
(def app-state (atom {:list ["Lion" "Zebra" "Buffalo" "Antelope"]}))
(defn handle-change [e owner {:keys [text]}]
(om/set-state! owner :data (vec (filter (fn [x] (> (.indexOf x(.. e -target -value)) -1)) (@app_state :list))))
(om/set-state! owner :text (.. e -target -value)))
(defn list-view [app owner]
(reify
om/IInitState
(init-state [_]
{:text nil
:data (:list app)
})
om/IRenderState
(render-state [this state]
(dom/div nil
(apply dom/ul #js {:className "animals"}
(dom/input
#js {:type "text" :ref "animal" :value (:text state)
:onChange #(handle-change % owner state)})
(map (fn [text] (dom/li nil text)) (:data state)))))))
(om/root list-view app-state
{:target (. js/document (getElementById "registry"))})
Ich denke 'list-data' Fall unempfindlich sein sollte. '(defn liste-data [alist filter-text] (filter # (wiederfinden (js/RegExp. Filter-text" i ")%) alist))' Wenn Sie nach "a" 'suchen, erhalten Sie : '(" Zebra "" Buffalo "" Antilope ") Quelle: http://stackoverflow.com/questions/23186490/a-case-insensitive-filter-in-clojure-clojurescript?noredirect=1#comment35464719_23186490 – leontalbot