Liftweb - LiftScreen и AJAX - PullRequest
       5

Liftweb - LiftScreen и AJAX

2 голосов
/ 12 марта 2012

Я пытаюсь использовать Liftscreen для реализации формы в ajax, но я хочу использовать Ajax, то есть я хочу, чтобы функция finish вызывалась при каждом обновлении поля. Обычно я использую такие функции, как SHtml.ajaxText для достижения этой цели, но я бы предпочел использовать LiftScreen, поскольку в него уже включено много подпрограмм.

Вот базовый пример кода, который я использую

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

Поэтому я бы хотел, чтобы функция финиша вызывалась всякий раз, когда вызывается поле name или age. Я бы предпочел общую настройку вместо ручного вызова finish в каждом поле.

Обновление Я работаю в поисковой системе в зависимости от некоторых критериев, поэтому я хочу, чтобы мои результаты обновлялись при каждом изменении критерия.

Я уже прочитал страницу документации о LiftScreen на Assembla , и я также нашел обсуждение о ajax на LiftScreen в официальном списке рассылки (с которым я свяжусь, если не смогу найти ответ здесь)

1 Ответ

1 голос
/ 14 марта 2012

Я бы попробовал добавить небольшой javascript к шаблону, который вы используете для своего экрана (wizard-all?).Например:

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

Не уверен, возможно ли добавить такой сценарий из фрагмента LiftScreen.

РЕДАКТИРОВАТЬ Другим способом будет использование настраиваемого полякак описано в вики здесь .Я думаю, что вы могли бы сделать что-то вроде:

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(_)) 
  } 
}
...