2009-04-17 13 views
6

私はちょうどリフトを使い始めています。私は現在、通常のフォームをajaxフォームに変更しようとしていますが、メソッドprocessEntryAddは決して呼び出されません。スカラリフトフレームワーク、複数の値を提出する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), 
     )) 
} 

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

ありがとうございます! (processEntryAdd、 "ユーザーを追加")> SHtml.hiddenが++リフトメーリングリスト上

- この質問デビッド・ポラックに対応して

答えて

1

は "提出"

を使用して提案しました。

+0

それはうまくいくが、残念なことに問題全体を解決することはできません。私がまだ欠けているパズルの一部は、Ajaxレスポンスの後にページの一部を再描画しています。 – ivans

9

この質問は、昔のようなものですが、私は最近、この自分自身を知るために必要な、これは私がこれまで見た中で最高のソリューションです:

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

隠しフォーム要素に処理を追加することで、あなたがどのようなビューコードも変更せずに、送信ボタンを保持してください。

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

、一番下までスクロールし、ここで
def processEntryAdd() { 
    Log.info("processEntryAdd: " + firstName + ", " + lastName) 
    JsRaw("alert('process entry added')") 
} 
+0

ありがとう、これは簡単な解決策のように見え、すぐに試してみることにします。 – ivans

+0

最後のスニペットでは、自動的に 'Unit'になる' processEntryAdd'を防ぐ '='があります。 – Owen

1

が答えだ(<後の最初のスペースを無視する):

あなたはprocessEntryAddを持つことにより、クライアント側の動作を追加することができます()JsCmdを返します

"submit" - >(SHtml.hidden(auth)++ <入力タイプ= "submit" value = "Login" />)