2011-08-27 3 views
2

Yesod에서 확인 대화 상자를 만드는 가장 간단한 방법은 무엇입니까? 경우에 따라 양식이 게시 될 때 조치를 취하기 전에 확인을 요청하고 싶습니다. 사용자가 별도의 확인 페이지를 보낸 다음 '예'버튼을 누르면 게시 된 데이터를 처리하여이 작업을 수행 할 수 있습니다.Yesod의 확인 대화 상자

나는 setUltDestReferer와 같은 함수를 사용하여 이것이 가능해야한다고 생각한다. 문제는 Yesod에서 가장 쉽고/가장 일반적인 방법은 무엇입니까? 이상적으로는 requireAuth처럼 핸들러에서 하나의 함수 호출로 종결되어야합니다. 나는이 권리를 이해하면

+2

자바 스크립트를 사용하여 클라이언트 측에서이 작업을 수행하는 것이 더 좋지 않습니까? – hammar

+0

Javascript 대신 서버 측에서 수행하려는 주된 이유는 특정 상황에서만 확인을 요청하기 때문입니다. 클라이언트 측에서 로직을 수행하는 것은 가능하지만 데이터베이스에서 더 많은 데이터를 추출하여 클라이언트로 보내야합니다. – chrisdb

답변

1

, 당신은

  1. 일부 확인 페이지를 렌더링하고 요청의 추가 처리를 중단 무언가를 원한다.
  2. 이 처리기로 "예"버튼 링크를 되돌려 플래그를 설정하십시오.
  3. 플래그가 설정된 경우 아무 작업도 수행하지 말고 요청을 계속 진행하십시오.

이렇게하면 원본 양식 데이터가 어떻게 처리되어야하는지에 대한 질문이 즉시 제기됩니다. 이를 해결할 수있는 방법이 있습니다. 세션에 저장하거나 "예"링크에 인코딩 된 URL을 포함시켜야합니다.

후자의 방법이 효과적이지만 약간 지저분 할 수 있습니다. 전자는 사용자가 뒤로 버튼을 누르거나 새 탭에서 링크를 열 때 등의 문제를 일으킬 수 있습니다. 이것은 HTTP의 상태 비 저장 디자인에서 비롯됩니다.

대신 새로운 AJAX 핸들러를 만들고

  1. 이 확인이 필요한 경우 확인하기 위해 핸들러를 호출 몇 가지 자바 스크립트를 추가하는 청소기 수 있습니다.
  2. 그런 경우 확인을 표시합니다.
  3. 사용자가 "예"를 클릭하면 평소와 같이 양식을 제출하십시오.
0

@ hammar의 접근 방식을 사용하는 것이 좋습니다. 최선이라고 생각합니다. 어떤 이유로 AJAX가 옵션이 아니라면 첫 페이지에서 제출 된 양식 데이터가 포함 된 확인 페이지에 숨겨진 양식을 넣는 것을 고려할 수 있습니다. runRequestBody을 사용하면 상당히 간단합니다.

관련 문제