2009-04-17 6 views
6

저는 리프트를 시작하기 시작했습니다. 이제는 일반 폼을 아약스 폼으로 변경하려고 시도하고 있지만 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), 
     )) 
} 

어떤 아이디어를 얻으려고하는지 또는 위의 코드가 작동하지 않는 이유는 무엇입니까? 버튼을 누르고 두 로컬 변수 firstNamelastName이 설정되었지만 SHtml.submit과 연관된 기능이 호출되지 않은 경우 두 양식 필드 값이 제출됩니다.

감사합니다. (processEntryAdd, "사용자 추가")> SHtml.hidden는 ++ 리프트 메일 링리스트에

-이 질문에 데이비드 폴락에 대응

답변

1

는 "제출"

를 사용하여 제안했다.

+0

그리고 작동하지만 불행히도 모든 문제를 해결하지 못합니다. 내가 아직 빠진 부분은 아약스 응답 후 페이지의 일부를 렌더링하는 것입니다. – 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

마지막 스 니펫에는 'processEntryAdd'가 자동으로'Unit '이되지 않도록'= '가 있어야합니다. – Owen

1

는 대답 (< 후 첫 공간을 무시) :

당신은 processEntryAdd을함으로써 클라이언트 측 동작을 추가 할 수 있습니다()는 JsCmd을 반환

"제출"-> (SHtml.hidden (auth) ++ < 입력 유형 = "제출"값 = "로그인"/>)

관련 문제