Well, I'd prefer to keep different concerns separated. Iterating over that list is not the only case where I render those objects, that's why I want the rendering of these objects to be separated into their own template.
But maybe I'll change my mind. Doing it like you suggested is probably faster too. Erkki L On Dec 23, 8:31 pm, Ross Mellgren <[email protected]> wrote: > S.session.get.processSurroundAndInclude has a couple issues, first is > that it seems to be a much larger stick than you need, and the other > reason is that you are using "get" (which is for Option, I presume you > mean open_!, since S.session is a box) which is not safe -- it will > throw NPE in the case where a session is not available. > > I think the more idiomatic way is probably more like > > def forEachMsg(in: NodeSeq): NodeSeq = { > val msgs = somehowGetAListOfModelObjects() > msgs.flatMap { msg => > bind("msg", in, "field1" -> msg.field1, "field2" -> > msg.field2); > } > > } > > And then inline at the call side: > > <lift:blabla.forEachMsg> > <msg:field1 /> > <msg:field2 /> > </lift:blabla.forEachMsg> > > Is there something peculiar about your use case where you really want > to do lift:embed and so on? > > -Ross > > On Dec 23, 2009, at 1:26 PM, Erkki Lindpere wrote: > > > This has probably come up previously, but I couldn't find anything > > even though I think a couple of days ago I read about something > > similar: > > > I want to do a snippet that behaves similarly to JSTL-s forEach tag. > > Not exactly the same, but the idea is that it gets some list of model > > objects, then goes through it element by element and processes the > > input NodeSeq for each element. What I came up with is this: > > > def foreach(in: NodeSeq) = { > > val msgs = somehowGetAListOfModelObjects(); > > msgs.flatMap { msg => > > // set the current object (CurrentMessage is a ThreadLocal) > > CurrentMessage.set(msg) > > // process the contents, with the current object in scope > > S.session.get.processSurroundAndInclude("", in) > > } > > } > > > And it's called like this: > > <lift:blabla.foreach> > > <lift:embed what="message.html" /> > > </lift:blabla.foreach> > > > Is there a more correct solution to this? > > > -- > > > 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 > > athttp://groups.google.com/group/liftweb?hl=en > > . -- 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.
