6

私はリフトを始めたばかりで、通常のフォームを ajax フォームに変更しようとしていますが、メソッドprocessEntryAddが呼び出されることはありません。

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),
        ))
}

私がやろうとしていることを達成する方法、または上記のコードが機能しない理由。ボタンが押され、2 つのローカル変数が設定されると、2 つのフォーム フィールドの値が送信されますがfirstNamelastNameSHtml.submit に関連付けられた関数は呼び出されません。

ありがとう!

4

3 に答える 3

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')")
}
于 2009-09-09T22:09:09.523 に答える
1

この質問に答えて、DavidPollakは

"送信"->SHtml.hidden( "ユーザーの追加"、processEntryAdd)++

リフトメーリングリストにあります。

于 2009-04-22T20:33:37.880 に答える
1

答えは次のとおりです。一番下までスクロールします(<の後の最初のスペースは無視してください)

http://www.assembla.com/wiki/show/liftweb/ajaxForm

"送信"->(SHtml.hidden(auth)++ <input type = "submit" value = "Login" />)

于 2011-01-04T14:41:11.080 に答える