2012-03-12 1 views
2

ajax에서 양식을 구현하기 위해 Liftscreen을 사용하려고하지만 Ajax를 사용하고 싶습니다. 즉, 필드가 업데이트 될 때마다 finish 함수를 호출하려고합니다. 일반적으로이 목표를 달성하기 위해 SHtml.ajaxText과 같은 함수를 사용하지만 이미 많은 루틴이 포함되어 있으므로 LiftScreen을 사용하는 것을 선호합니다.Liftweb - LiftScreen and ajax

다음은 필드 name 또는 age가 호출 될 때마다 호출 될 나는 그래서 마무리 기능을 원하는

class ScreenTest extends LiftScreen { 

    // here are the fields and default values 
    val name = field("Name", "") 

    // the age has validation rules 
    val age = field("Age", 0, minVal(13, "Too Young")) 

    def finish() { 
    println("-------> Finish function has be called") 
    S.notice("Name: "+name) 
    S.notice("Age: "+age) 
    } 
} 

을 사용하고 코드의 기본적인 예입니다. 각 필드에 수동으로 finish을 호출하는 대신 일반 설정을 선호합니다.

업데이트 일부 기준에 따라 검색 엔진을 연구 중이므로 기준을 수정할 때마다 결과를 업데이트하고 싶습니다.

이미 Assembla에 LiftScreen에 대한 문서 페이지를 읽고 나는 또한 (내가 여기에 어떤 답을 찾을 수없는 경우 나 연락드립니다) 공식 메일 링리스트

+0

"전화 걸기"란 무엇을 의미합니까? 초점이 맞습니까? – Lukasz

+0

@ 루카스 나는 이름이나 나이가 수정 될 때마다 finish() 함수를 사용하여 이름과 나이를 출력하고 싶다. 몇 가지 기준에 따라 검색 엔진을 연구 중이므로 기준을 수정할 때마다 결과를 업데이트하고 싶습니다. –

답변

1

내가 시도 할 것이다에 ajax on LiftScreen에 관한 토론을 발견 화면에 사용하는 템플릿에 작은 javascript를 추가합니다 (wizard-all?). 예 :

jQuery('input').change(function() { 
    jQuery('#idOfForm').submit(); 
}); 

LiftScreen 스 니펫에서 스크립트를 추가 할 수 있는지 확실하지 않습니다.

수정 또 다른 방법은 위키 here에 설명 된대로 맞춤 입력란을 사용하는 것입니다. 나는 당신이 다음과 같은 것을 할 수 있다고 생각합니다.

object AjaxifiedScreen extends LiftScreen { 
    val name = new Field { 
    type ValueType = String 
    override def name = "name" 
    override implicit def manifest = buildIt[String] 
    override def default = "" 
    override def toForm: Box[NodeSeq] = SHtml.ajaxText(is, doStuff(_)) 
    } 
} 
+0

네,하지만 LiftScreen에서 이미 구현 된보다 글로벌 솔루션을 찾고 있었지만, 존재하지 않는다면이 방법을 사용해야 할 것입니다. –

+1

수정 된 답변입니다. 나는 ajaxText를 사용하여 onblur 이벤트로 작업 할 수 있다고 생각합니다. –

+0

이것은 실제로 내 비전에 더 가깝습니다. 나는 "기본"행동이 존재한다는 점을 넘어 섰습니다. 그러나 사실이 아닌 것처럼 보였습니다. 저는 이것을 사용합니다. 덕분에 많은 도움을 받았습니다. –