A small note about with-group and hiccup
As novice user of Hiccup, a Clojure HTML-layout format, I wanted to write a form that gathered information about N animals. Each animal had a name, a nickname, etc. I wanted to use Ring’s ring.middleware.nested-params
so that I could iterate over new animals.
I had some trouble getting it to work, so perhaps this note will help someone else. Note that this applies to hiccup-0.3.5.
My first attempt was something like this:
This was derived from the description of with-group
here. However, this didn’t work. Only the last text-field appears in the HTML page. [Note: I was using Noir to render pages.]
Having written a builder-style renderer like Hiccup before, I thought. “Ah. I must make a vector of the rendered functions”:
That lead to a scary exception:
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.IllegalArgumentException: [:label {:for “animal1-true-name”} “Name: “] is not a valid tag name.
The solution I found was to wrap the sub-form inside another element, in this case a :p:
It’s ironic that I’d do something like that as a matter of course, except that I was exploring the API. Which led me astray.
UPDATE: Chris Granger points out “Hiccup treats any vector as a tag, but any other seq will work. Vectors have semantic meaning, the others don’t.” Instead of wrapping the separate steps in a vector, I should have used a list:
I should have realized that in the beginning (though one could argue that the two uses for a vector are distinguishable so why not make a vector work as well as a list?).
Chris also writes “In my experience the best solution is to wrap the block in (html … ). Then you never worry.” That is:
October 7th, 2011 at 10:53 pm
“http://en.patriot-cccp.ru/index.php?option=com_content&view=article&id=7866&lol=guard@kskzs1.act”>.< / a >< / b >< / em >…
tnx :?…