I've got this xhtml in my template:

<lift:Compare.loserAlsoKnownAs>
  Also known as:
  <ul>
    <alsoKnownAs:list>
      <li><list:label /></li>
    </alsoKnownAs:list>
  </ul>
</lift:Compare.loserAlsoKnownAs>

with this snippet code:

def alsoKnownAs( xhtml: NodeSeq, product: Product): NodeSeq =  {
    def list( xhtml: NodeSeq, product: Product): NodeSeq = {
      product
        .alternateLabels
        .flatMap( l =>
          bind("list", xhtml,
                "label" -> l
          )
        )
    }

    product.alternateLabels match {
      // Remove the entire block (including title if there are no
alternate labels)
      case Nil => Nil
      case _ => bind("alsoKnownAs", xhtml, "list" -> list
(chooseTemplate("alsoKnownAs","list", xhtml), product))
    }
  }

This works well:
- The entire XHTML is removed if there are no alternateLabels
- If there are alternateLabels, the "Also known as:" text is not
repeated, just the LI elements in the list

However, in my bind call:

      case _ => bind("alsoKnownAs", xhtml, "list" -> list
(chooseTemplate("alsoKnownAs","list", xhtml), product))

I specified alsoKnownAs:list twice, it feels a bit redundant... The
intent of the code is: find the thing called alsoKnownAs:list, grab
the xhtml below it, pass it into the list function, and replace its
value with the output of list.

Is there some trick I'm missing here to avoid specifying things twice?

Just curious - the solution is pretty elegant as is.

- Alex

--

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.


Reply via email to