Noir webapp oluşturuyorum ve dinamik olarak yeni görünümler ve modeller oluşturmam gerekiyor. Bir kaynağın görünümü ve denetleyicisinin ayrı ad alanlarına sahip olduğu noir örneklerini takip ediyorum ve bunu çok temiz bir yaklaşım olarak buldum. Bununla uyumlu olarakDinamik olarak oluşturulmuş bir ad alanına işlev eklemek için temiz bir yol var mı?
, ben dinamik olarak onları görüş ve modelleri, ardından stajyer uygun fonksiyonlar tekabül yeni ad alanları oluşturmak gerekiyor. Benim fikrim, yeni ad alanında çağrıldığında, uygun rotaları/kısmi parçaları/her ne olursa olsun, ayrı bir isim alanında belirtilen makrolara sahip olmaktı. Örneğin
(benim ilk defmacro affet):
(ns project.views.proto
(:use noir.core
hiccup.core
hiccup.element
hiccup.form))
(defmacro def-all-page
[path]
`(defpage ~path []
(html
[:h1 "Ya'll here"])))
dan denir ...
(ns project.proto
(:use [clojure.contrib.with-ns :only [with-ns]])
(create-ns 'foo)
(intern 'foo 'path "path") ; In reality, the path is dynamic which is why I intern it
(with-ns 'foo
(clojure.core/refer-clojure)
(use 'noir.core
'hiccup.core
'hiccup.element
'[project.views.proto :only [def-all-page]])
(def-all-page path)
Ancak, benim yeni ad içinden bu çağırarak bana NullPointerException verir. Herhangi bir yardımı çok takdir ediyorum ve daha iyi bir yaklaşım olup olmadığına bakarım. Sadece gerekli tüm tanımları içeren bir isim alanına başvurmak gibi mi?
İlk gönderi ve bunun bir this tekrarı olduğunu sanmıyorum. Teşekkürler!
Yayınınızı düzenlemeyi ve ad alanınızı ve makroyu çağıran bazı örnek Clojure kodlarını ifade etmeyi düşünür müsünüz? Hangi bağlamda kullanıldığını görmek isterim. tnx – octopusgrabbus
Umarım bu biraz daha faydalıdır. – jtmoulia
Aldığım hata şu simgeyi çözemiyor: bu bağlamda with-ns, derleme, ancak bunun bir işlev veya makro dışında -ns ile kullanılabildiğini bilmiyorum. – octopusgrabbus