2009-04-17 75 views
6

我剛剛開始使用電梯,現在我正在嘗試將常規窗體更改爲ajax窗體,但從未調用方法processEntryAddScala提升框架,提交多個值的ajax表單?

def addUser(xhtml : Group) : NodeSeq = { 

    var firstName = "" 
    var lastName = "" 

    def processEntryAdd() { 
     Log.info("processEntryAdd: " + firstName + ", " + lastName) 
    } 

    SHtml.ajaxForm(
     bind("entry", xhtml, 
      "firstName" -> SHtml.text(firstName, 
       (x) => { 
        Log.info("Setting firstName to " + x); 
        firstName = x 
       }), 
      "lastName" -> SHtml.text(lastName, 
       (x) => { 
        Log.info("Setting lastName to " + x); 
        lastName = x 
       }), 
      "submit" -> SHtml.submit("Add user", processEntryAdd), 
     )) 
} 

任何想法如何實現我想要做的,或爲什麼上面的代碼不起作用。 按下按鈕時會提交兩個表單域的值,並且設置了兩個局部變量firstNamelastName,但未調用與SHtml.submit相關的功能。

謝謝! > SHtml.hidden( 「添加用戶」,processEntryAdd)++

電梯郵件列表 -

回答

1

在回答這個問題,大衛·波拉克使用

「提交」 建議。

+0

而且工作,但不幸的是doesn不能解決整個問題。我仍然遺漏的一部分難題是在ajax響應之後重新渲染頁面的一部分。 – ivans 2009-04-23 08:07:25

9

這個問題是慈祥的老人,但我最近需要這種認識自己,這是迄今爲止我見過的最好的解決辦法:

ajaxForm(
    bind("entry", xhtml, 
     "firstName" -> text(firstName, firstName = _), 
     "lastName" -> text(lastName, lastName = _), 
     "submit" -> submit("Add user", processEntryAdd _), 
    ) ++ hidden(processEntryAdd _) 
) 

通過增加處理到一個隱藏的表單元素你得到保持提交按鈕,而不更改任何視圖代碼。

可以通過讓processEntryAdd添加客戶端行爲()返回一個JsCmd:

def processEntryAdd() { 
    Log.info("processEntryAdd: " + firstName + ", " + lastName) 
    JsRaw("alert('process entry added')") 
} 
+0

謝謝,這看起來像一個簡單的解決方案,即將嘗試。 – ivans 2009-11-02 08:22:46