2012-08-29 33 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 –

相關問題