Move the bind to an inner function, and call that function
recursively, for example:
class Image extends DispatchSnippet {
val dispatch: DispatchIt = {
case "showAll" => showAll
}
def showAll(ns: NodeSeq): NodeSeq = {
def doBinding(ns: NodeSeq): NodeSeq =
bind("showAll", ns,
"link" -> { (ns: NodeSeq) =>
SHtml.link("/viewImage", () => selected(i.id),
<img src={ i.url } />,
doBinding(ns))
})
doBinding(ns)
}
}
-Ross
On Dec 23, 2009, at 4:20 PM, Jim Wise wrote:
>
> So, I'm working on a simple image gallery, and I can make a link
> from an
> image in the gallery to a page for that image with this:
>
> <lift:Image.showAll>
> <showAll:imgLink />
> </lift:Image.showAll>
>
> (additional content omitted for clarity). This is simple enough to
> bind:
>
> "imgLink" ->
> link("/viewImage", () => selected(i.id), <img src={i.url} />)
>
> but this a.) puts a tiny bit of content in the snippet (what if
> different pages want different class attributes on the img tag?), and
> b.) isn't customizable -- if I want another link from the image's
> name,
> I need another bindpoint, etc.
>
>
> So, with some playing around, I can get a little more general with
>
> <lift:Image.showAll>
> <showAll:link>
> <p>some random html</p>
> </showAll:link>
> </lift:Image.showAll>
>
> bound via:
>
> "link" ->
> {n: NodeSeq => link("/viewImage", () => selected(i.id), n)}
>
> or:
>
> "link" -> link("/viewImage", () => selected(i.id),
> chooseTemplate("showAll", "link", in)),
>
> this works well enough as far as it goes (the latter is a little
> worse,
> IIUC as it involves more rescanning of the html).
>
>
> But what I would like to do is this:
>
> <lift:Image.showAll>
> <showAll:link>
> <img showAll:imgUrl="" />
> </showAll:link>
> </lift:Image.showAll>
>
> and neither of the previous two BindParams work, yielding:
>
> XML Parsing Error: prefix not bound to a namespace
> Location: http://www.draga.com:9080/viewImages
> Line Number 135, Column 12:
> <img showAll:imgUrl="" />
>
> since the content is not re-substituted.
>
> So far, the only way I've found to do this is with a second call to
> bind, repeating the list of BindParams:
>
> "link" -> // XXX XXX XXX ugly respecifaction of bind
> {n: NodeSeq => link("/viewImage", () => selected(i.id),
> bind("showAll", n,
> "name" -> i.name.is,
> AttrBindParam("imgUrl", i.url, "src")
> ))},
>
> Is there a cleaner way to do this -- to specify that I want bind
> points
> of this snippet to be evaluated even if they appear within the XML of
> other bind points? I don't want or need true recursive evaluation --
> just to bind all of the bind points which were visible when the xhtml
> was first parsed.
>
> Thoughts? This is with 1.1-M8, though I don't think it makes a
> difference...
> --
> Jim Wise
> [email protected]
--
You received this message because you are subscribed to the Google Groups
"Lift" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/liftweb?hl=en.