DOM'ın Clojure veri yapısı gibi görünmesini sağlayan bir Clojurescript kitaplığı var mı? Ben DOM manipülasyon belirli tür do Enfocus gibi birkaç kütüphaneleri buldum ama ne istediğim böyle DOM tedavi edebilmek için ise:Clojurescript DOM arabirimi
cevap
Clojure veri yapıları üzerinde çok
(get dom id) - returns element called id in dom
(get dom id create-fn) - return element if exists, otherwise creates it
(update-in dom [:body this that] update-fn) - set attribute on a DOM element
(assoc parent-element id child-element) - associate child element with parent
(conj parent child) - append child element to parent element
ve tüm kalıcıdır Ancak, örneğinizde, yan etki yapmak istediğiniz gibi görünüyor (yani, bunu değiştirmek için DOM'ı vurun). Bu, prosedürel/zorlayıcı bir yaklaşımdır, dolayısıyla geriye adım atmaya ve problemi daha işlevsel bir tarzda yeniden biçimlendirmeye değer olabilir. Kişisel felsefem, "veri olarak görüntülemeleri" ele almak ve Clojure'ın kalıcı veri yapılarını, oluşturmam gereken son dakikaya kadar kullanarak modellemektir.
Hiccup hakkında bilgi alıyor musunuz? Eğer düz eski Clojure fonksiyonları oluşturularak inşa edebilir
[:div {:with "attribute"} "and" [:span "children"]]
: Fikir düz vektörler ve haritaları kullanarak bir HTML veya SVG DOM temsil etmektir. Clojure'da bunu HTML'ye (orijinal Hiccup kütüphanesini kullanarak) yapabilirsiniz, ancak doğrudan (potansiyel olarak var olan) DOM yapılarına işleyen en az iki ClojureScript kitaplığı vardır. Crate, Hiccup'ın yakın bir bağlantı noktasıdır ve Singult, D3.js'den esinlenilmiş veri bağlama gibi bazı ek anlamlara sahiptir (Singult aslında CoffeeScript'te yazılmıştır, bu nedenle düz JavaScript'ten kullanılabilir ve Crate'den daha hızlıdır).
C2 kitaplığım, DOM'yi temel verilerle senkronize halde tutmak için veri bağlama semantiklerini Singult üzerine oluşturur.
(bind! "#main"
[:section#main {:style {:display (when (zero? (core/todo-count)) "none")}}
[:input#toggle-all {:type "checkbox"
:properties {:checked (every? :completed? @core/!todos)}}]
[:label {:for "toggle-all"} "Mark all as complete"]
[:ul#todo-list (unify (case @core/!filter
:active (remove :completed? @core/!todos)
:completed (filter :completed? @core/!todos)
;;default to showing all events
@core/!todos)
todo*)]])
(C2 TodoMVC implementation alınan): Bir TODO listesi için bu şablonu düşünün . "Tümünü denetle" kutusunun işaretli olup olmadığına bakılmaksızın, temeldeki verilerden (bir atomda saklanır) doğrudan elde edilir. Bu veriler her değiştiğinde, şablon yeniden çalışır ve dom otomatik olarak güncellenir.
Temel fikir, uygulama verilerinizden Hiccup veri yapılarına doğru ileri yönde eşlemeler oluşturmak ve daha sonra kütüphanenin DOM'ı senkronize etmesine izin vermesidir (ekleme/çıkarma, alt öğeleri, & c.). Kendinizi DOM'ın durumuyla ilgili olarak endişelendirmeniz gerekmiyorsa (bu zaten eklenmiş mi? Bazı sınıfları değiştirmem gerekiyor mu?), O zaman bir çok karmaşıklık düşüyor.
Teşekkürler. Aslında önceki DOM elemanlarının çıkarılması ve onları yeni oluşturulanlarla, DOM parçalarının Clojure tarzı kalıcı yapılar olarak (ama "immutable" DOM fragmanları olarak uygulanmakta olan) tedavi edilmesiyle değiştirmeyi düşünüyordum. Ancak, şimdi bunun hakkında düşünüyorum, muhtemelen yavaş ve savurgan olurdu. Kütüphanenizi deneyeceğim ... SVG yapabilir mi? – Hendekagon
Merhaba, http://keminglabs.com/c2/ adresindeki çubuk grafik örneğini denedim ve "Yakalanmayan Hata: TODO: öğe stillerinin haritasını döndür" ifadesini alıyorum. Ayrıca, hangi şeylerin yapılacağını öğrenmek için biraz zaman harcadık: ihtiyaç,: kullanım ve makrolar, örneklerin çoğu izole kod parçalarıdır. Yine de ilginç görünüyor. Verilerin bu düğümlerin kimliğine göre dom elemanlarına nasıl eşlenmesini yönetiyorsunuz? Birleşik Krallık'ta hangi düğümlere hangi verilerin karşılık geldiğini ve yeni kod ekleyip eklemeyeceğinizi nasıl birleştirir? – Hendekagon
Evet, SVG'yi iyi işleyebilir. Singult, ortak SVG öğelerini otomatik olarak adlandıracaktır (
- 1. ClojureScript
- 2. clojurescript
- 3. Grails + ClojureScript
- 4. Bir clojurescript programından içinde bulunduğum Clojurescript ad alanını nasıl alabilirim?
- 5. Clojurescript makrolarından gerekli Clojurescript kodu ile nasıl ilgilenirim?
- 6. ClojureScript nasıl kullanılır?
- 7. Clojurescript kitaplıkları - goog.require
- 8. ClojureScript Parametre Beyanı Hata
- 9. Tasarım ve ClojureScript Uygulaması
- 10. clojurescript kullanarak knockout.js sarmalanıyor
- 11. ClojureScript REPL içinde gereksinme sözdizimi REPL
- 12. Arabirimi
- 13. Varolan bir codebase'e ClojureScript Ekleme
- 14. DOM
- 15. Kullanıcı Arabirimi
- 16. stringify/ayrıştırma edn içinde Clojure/ClojureScript
- 17. ClojureScript makro hatası: "ns-nitelikli adı tanımlanamıyor"
- 18. Radium neden Reaktif (Clojurescript) ile çalışmıyor?
- 19. document.getElementBy, bir dom dom öğesini döndürüyor mu?
- 20. jQuery, DOM
- 21. PHP'nin DOM
- 22. , DOM takımının
- 23. DOM uygulaması?
- 24. GTK + kullanıcı arabirimi testi
- 25. ITypeConverter arabirimi, AutoMapper 2.0
- 26. Typescript İşlev Arabirimi
- 27. Web Arabirimi CVS deposu
- 28. açısal kullanıcı arabirimi yüklenmiyor
- 29. Komut Satırı Arabirimi Scala
- 30. IEqualityComparer arabirimi Java'da
ok sadece Domina bulundu - en yakın şey – Hendekagon