2012-03-12 143 views
2

我想使用Liftscreen在ajax中實現一個表單,但我想使用Ajax,也就是說,我希望在更新字段時調用finish函數。通常我會使用像SHtml.ajaxText這樣的函數來實現這個目標,但我更喜歡使用LiftScreen,因爲它已經包含了很多例程。Liftweb - LiftScreen和ajax

這裏是代碼一個基本的例子,我使用

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

所以我想結束函數每當場nameage被稱爲被調用。我更喜歡一般設置,而不是在每個字段中手動調用finish

更新根據一些標準,我在搜索引擎上工作,所以我希望在修改條件時更新結果。

我已經讀到LiftScreen文檔頁面上Assembla,我也正式郵件列表(如果我不能在這裏找到任何答案,我會聯繫)

+0

你是什麼意思的「叫」?這是關注點嗎? – Lukasz 2012-03-13 08:37:44

+0

@Lukasz我的意思是我希望函數finish()在名字或年齡被修改時打印名字和年齡。我正在根據一些標準在搜索引擎上工作,所以我希望在修改標準時更新結果。 – 2012-03-13 10:04:39

回答

1

我會嘗試找到約ajax on LiftScreen討論在您用於屏幕的模板中添加一個小javascript(嚮導 - 全部?)。例如:

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

不確定是否可以從LiftScreen代碼段添加這樣的腳本。

編輯 另一種方法是使用wiki 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中實施的更全面的解決方案,但是如果它不存在,我將不得不使用此方法。 – 2012-03-15 13:46:13

+1

編輯答案。我相信,通過ajaxText你可以使用一個onblur事件。 – 2012-03-15 21:33:38

+0

這實際上更接近我的視野,我跳過它存在一個「默認」行爲,但因爲它似乎並非如此,我會用這個,非常感謝您的幫助。 – 2012-03-16 08:24:56