2012-08-29 32 views
4

我已经定义了这个函数来建立一个名单os学生,每一个与他的名字,姓氏和形象,这取决于一个属性可以是一个蜱或十字。我想分配标签学术(我的图片)onClick事件来调用我的代码段中称为学术(Student)的函数,该函数接收学生,然后重定向到另一个页面。谁能帮我??如何将snippet函数绑定到按钮或图像的onclick事件?

def students(xhtml: NodeSeq) = { 

    def bindStudents(template: NodeSeq): NodeSeq = { 

     studentsList.flatMap { 
     s => bind("studentTag", template, "name" -> s.Name, "surname" -> s.Surname, 
      AttrBindParam("academic", if (s.HasIssue("Academic")) tickUrl else crossUrl, "src"),   
     )} 
    } 
    bind("list", xhtml, "studentsList" -> bindStudents _) 
    } 


def academic(s:Student)={ 
    //do some stuff with s 
    redirectTo("/OtherPage.html") 
    } 

HTML CODE

<list:studentsList> 
      <tr> 
       <td> <studentTag:name /> </td> 
       <td> <studentTag:surname /> </td> 
       <td> 
        <img studentTag:academic=""/> 
       </td> 
</list:studentsList> 
+0

@布赖恩许 感谢ü乌拉圭回合答案布赖恩 现在我尝试这一点,但它不工作 <电梯:mySnippet2.students> ​​ Computer Hope 这在我的片段...... DEF学生(XHTML:NodeSeq):NodeSeq = {( “#tabla” #> studentsList.map {S => “#buttonAcademic [SRC]” #>(tickUrl) “#buttonAcademic [的onClick]” #> SHtml.onEvent(onClickCallback(S)_)})。应用(XHTML) } 我也使用这种尝试但它不工作 “.clickable [onClick]”#> –

+0

也许你错过了jQuery库?提起这个jQuery的ajax调用,所以你会需要它。这是一个完整的工作示例(https://gist.github.com/3548101)。您应该看到一个控制台消息和一个浏览器对话框,显示您在点击头像图标时选择的用户。 –

+0

@BrianHsu非常感谢你,现在它的工作很好...... !!! –

回答

5

有在SHTML的方法称为 'onEvent'。

我不太知道如何在旧的方式做到这一点,但如果你正在使用新的designer-friendly CSS binding helpers,这将是非常简单的:

HTML模板:

<div data-lift="MySnippet"> 
    Name:<span id="name">Student Name</span> 
    SurName:<div class="surname">Surname</span> 
    <img src="imageURL" class="clickable"/> 
</div> 

这里是片段:

class MySnippet 
{ 
    val studentName = "whatever" 
    val surName = "..." 

    def onClickCallback(s: String): JsCmd = { 
     // Do what ever you want, BTW, I never have idea 
     // what the ``s`` the lift will passed in. 

     Alert('Hey, you clicked me.') // This is the javascript that browser will execute when user click on the element. 
    } 

    // Note there is no argument list 
    def render = { 
     "#name" #> studentName & // Replace the HTML tag with id="name" to studentName 
     ".surname" #> surName & // Replace the HTML tag with class=surname to surName 
     ".clickable [onClick]" #> SHtml.onEvent(onClickCallback) // Append onClick attribute to HTML tag that has "clickable" class, and it will calle onClickCallable in your snippet. 
    } 
} 

更新

对不起,我没有注意到,你是宾迪纳入清单。但既然有咖喱功能,也不会太难。

HTML代码:

<table data-lift="MySnippet"> 
    <tr> 
    <td><span class="name">Name</span></td> 
    <td><span class="surname">SurName</span></td> 
    <td><img src="test.jpg"/> </td> 
    </tr> 
</talbe> 

case class Student(name: String, surname: String) 

class MySnippet 
{ 
    def onClickCallback(student: Student)(s: String): JsCmd = { 
     Alert("You Click:" + student) 
    } 

    val xs = Student("Brian", "Hsu") :: Student("David", "Walter") :: Nil 

    def render = { 
     "tr" #> xs.map { student => 
      ".name" #> student.name & 
      ".surname" #> student.surname & 
      ".clickable [onClick]" #> SHtml.onEvent(onClickCallback(student)_) 
     } 
    } 
} 
+0

谢谢你的回答布赖恩,但我仍然没有得到它... –

+0

我改正“.clickable [onClick]”为“.clickable [onclick]”,但它仍然不工作,我点击我的形象,没有什么发生...你知道为什么吗? 感谢您的快速回复@Brian Hsu –

相关问题