Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Lift: create AJAX hyperlink for each item with CSS transform

Tags:

ajax

scala

lift

I want to create a list of items and have a hyperlink on each of them that performs some action, e.g. remove the item from the list.

My template looks like this:

<lift:surround with="default" at="content">
<div class="locations lift:Main.locations">
    <ul>
        <li class="one">
            <span class="name">Neverland</span>
            (<a href="#" class="delete">delete this</a>)
        </li>
    </ul>
</div>
</lift:surround>

I'm using the following CSS transform to fill it out:

def locations = {
    ".one *" #> somecollection map { item =>
        ".name" #> item.name &
        ".delete" #> ????
    }
}

Now, instead of "????", I'd love to put in something along the lines of SHtml.a( ()=>delete(item), _), but _ here is of type CssSel and a's argument should be NodeSeq

I could of course put simple xml.Text("delete this"), but I want to reuse the text that is inside the template.

Or is there a different way to generate AJAX hyperlinks?

like image 650
matejcik Avatar asked Oct 16 '11 21:10

matejcik


1 Answers

I found out how to do it. Basically, instead of generating the a tag, I have to use the tag from the template and put the AJAX code in it through the CSS transform:

def locations = {
    ".one *" # somecollection map { item =>
        ".name" #> item.name &
        ".delete [onclick]" #> ajaxInvoke (() => delete(item))
    }
}

I suspect that this way it would also be possible to make links that work both with and without JavaScript

like image 66
matejcik Avatar answered Nov 15 '22 04:11

matejcik