나는 noir webapp을 만들고 있는데, 새로운 뷰와 모델을 동적으로 생성해야한다. 나는 자원에 대한 뷰와 컨트롤러가 별도의 네임 스페이스를 가지고있는 느와르 예제를 따라 왔으며, 매우 깨끗한 접근 방식이라고 생각했다. 이과 유지에동적으로 생성 된 네임 스페이스에 함수를 추가하는 명확한 방법이 있습니까?
, 나는 동적으로의 뷰와 모델, 그리고 인턴 적절한 기능에 해당하는 새 네임 스페이스를 만들 수 있어야합니다. 내 생각은 매크로를 별도의 네임 스페이스에 지정하여 새 네임 스페이스에서 호출 할 때 적절한 경로/부분/기타를 제공하는 것이 었습니다. 예를 들어
(첫 defmacro을 용서) :
(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"])))
가 호출 ...
(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)
그러나, 나의 새로운 네임 스페이스 내에서 이것을 호출하면 나에게 NullPointerException이 있습니다. 저는 어떤 도움을 주셔서 감사 드리며, 더 나은 접근 방법이 있는지 없는지 잘 알고 있습니다. 마찬가지로 필요한 정의가 모두 포함 된 네임 스페이스를 참조하는 것만 큼?
첫 번째 게시물, 그리고 나는 그것이 this의 반복 생각하지 않습니다. 감사! 모든
당신은 귀하의 게시물을 편집하고 이름 공간과 매크로를 호출 일부 샘플 Clojure의 코드를 나타내는 고려겠습니까? 나는 그것이 사용 된 문맥을보고 싶다. tnx – octopusgrabbus
좀 더 도움이되기를 바랍니다. – jtmoulia
내가 얻는 오류는 symbol : with-ns를이 컨텍스트에서 컴파일 할 수 없다는 것입니다. 그러나 함수 또는 매크로와 함께 with-ns를 사용할 수 있다는 것을 의미하는지 알 수 없습니다. – octopusgrabbus