Try:
<lift:foo.myFoos>
 <foos:list>
   <div foo:div_id="xxx">
     <foo:id/>
   </div>
 </foos:list>
</lift:foo.myFoos>


In your bind:


def doFoo(in: NodeSeq): NodeSeq = List("a", "b", "c").zipWithIndex.flatMap {
case (str, idx) =>
  bind("foo", "id" -> str, AttrBindParam("div_id", Text("my_foo_"+idx),
"id))
}

bind("foos", xhtml,
  "list" -> doFoo _)

The AttrBindParam will bind to an attribute and let you create a value and a
new name for the attribute.

Does this help?

On Tue, Jun 2, 2009 at 8:01 AM, Lance Walton
<lance.c.wal...@googlemail.com>wrote:

>
> Hi.
>
> I'm still trying to grok your example :-) In the meantime, I'll try to
> give a bit more context.
>
> If I have this template:
>
> <lift:foo.myFoos>
>  <foos:list>
>    <div id="foo_foo:id">
>      <foo:id/>
>    </div>
>  </foos:list>
> </lift:foo.myFoos>
>
> Then when I munge it all, given foos with ids 12, 57 and 132, I'll get
> XML like this:
>
> <div id="foo_foo:id">
>   12
> </div>
> <div id="foo_foo:id">
>   57
> </div>
> <div id="foo_foo:id">
>   132
> </div>
>
> etc.
>
> What I want is XML like this:
>
> <div id="foo_12">
>  12
> </div>
> <div id="foo_57">
>  57
> </div>
> <div id="foo_132">
>  132
> </div>
>
> The reason I want this is because I have some ajax stuff going on
> which will do something with one of the foos and then replace the
> corresponding div with the updated version. Hence I need to be able to
> identify the div and the foos id seems the most natural thing to use.
>
> Many of the examples snippets I've seen embed fragments of XML (which
> I don't object to from a pragmatic point of view). I do find it a
> little strange though, since pains have clearly been taken to keep
> control logic out of the view, but now we're putting bits of view into
> the control logic.
>
> Once again, I'm just starting with this stuff, so I'm assuming that I
> don't understand something, rather than making the arrogant assertion
> that something is wrong with Lift :-)
>
> Regards,
>
> Lance
>
> On Jun 2, 3:09 pm, Timothy Perrett <timo...@getintheloop.eu> wrote:
> > Try:
> >
> > bind("foo", chooseTemplate("foos", "list", xhtml),
> >       "id" -> <div>example</div> % "id" -> foo.id.toString,
> > .....
> > )
> >
> > Without a bit more context / code its tough to help exactly - but from
> > this example you'll see how you can create dynamic attributes.
> >
> > Cheers, Tim
> >
> > On Jun 2, 2:59 pm, Lance Walton <lance.c.wal...@googlemail.com> wrote:
> >
> > > Hi.
> >
> > > I've seen a few threads about binding attribute values, but none of
> > > the solutions seem relevant for my problem. I am a Lift and Scala
> > > beginner, so I'm most likely missing something obvious.
> >
> > > I have the following template:
> >
> > > <lift:foo.myFoos>
> > >   <foos:list>
> > >     <div id="foo_foo:id">
> > >       ...
> > >     </div>
> > >   </foos:list>
> > > </lift:foo.myFoos>
> >
> > > and here is the piece of my Foo snippet to do with binding:
> >
> > >   def myFoos(xhtml : NodeSeq) : NodeSeq = foos.flatMap(foo =>
> > >     bind("foo", chooseTemplate("foos", "list", xhtml),
> > >       "id" -> foo.id,
> > >       ...))
> >
> > > What I want is for the id attribute in the div in the template to be
> > > given the value foo_1, foo_2, etc, depending on the value of foo.id in
> > > the snippet. What I get is foo_foo:id (and removing the 'foo_' part
> > > doesn't change anything).
> >
> > > Can anybody help?
> >
> > > Regards,
> >
> > > Lance
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to