Scaved JavaScript обратный вызов в Scala Лифт - PullRequest
1 голос
/ 19 октября 2011

Так что я играл с Lift в Scala, и мне это очень нравилось.Возможно, мне просто не хватает чего-то, что существует в библиотеке javascript лифта, но я не смог найти никакого способа использования обратного вызова javascript с определенной областью.Кажется, что лифт-способ обработки обратных вызовов состоит в том, чтобы передать обратный вызов как имя функции и сделать так, чтобы лифт возвращал JsCmd, который вызывает функцию ().

Мой код лифта в значительной степени основан на этом примере http://demo.liftweb.net/json_more И мой javascript выглядит примерно так:

function operation(config) {
    var actions = config.actions,
        action = actions.shift(),
        name = config.name;

    function chainAction(response) {
        if (actions.length > 0) {
            action = actions.shift();
            action.action(name, chainAction);
        }
    }

    action.action(name, chainAction);
}

operation({
    name: "ajax",
    actions: [
        { action: ajaxCall1 },
        { action: ajaxCall2 }
    ]
});

Где бы я хотел, чтобы ajaxCall1 и ajaxCall2 были вызовами AJAX для подъема.то есть callNoParam () в примере с лифтом, и chainAction - обратный вызов области действия.Есть ли способ сделать это в лифте, который мне не хватает?Для ясности я смог получить этот код для вызова функции подъема, но не для правильной обработки обратного вызова.

Спасибо.

Редактировать

После прочтения сгенерированного лифтом кода javascript создается впечатление, что действительно есть заполнители для обратных вызовов успеха / неудачи.В частности, похоже, что эта строка лифта

AllJsonHandler.is.jsCmd

генерирует эту строку javascript

function F86737576748N5SY25(obj) {liftAjax.lift_ajaxHandler('F86737576748N5SY25='+ encodeURIComponent(JSON.stringify(obj)), null,null);}

, которая ссылается на этот метод

lift_ajaxHandler: function(theData, theSuccess, theFailure, responseType)

Но не позволяетмне передать theSuccess или theFailure, которые выглядят так, как будто они передаются в вызовы jQuery.ajax ().Мое расследование продолжается.Если у кого-то есть хорошие ресурсы на is.jsCmd, это будет оценено.

1 Ответ

0 голосов
/ 28 июня 2012

Ниже приведен фрагмент кода, который добавляет на страницу функцию Javascript doCallback#placeholder). Эта функция выводит строку на консоль, а затем выполняет ajaxCall на сервер для функции commandCallback.

def addExecuteCallback(ns: NodeSeq):NodeSeq = {
  val log = JsRaw("console.log('[doCallback] Generated from Lift.');").cmd &
            SHtml.ajaxCall(JsRaw("commandString"), commandCallback _)._2.cmd
  val f = JsCmds.Function("doCallback", List[String](), log)
  ("#placeholder" #> JsCmds.Script(f)).apply(ns)
}

В конце commandCallback вы можете вернуть:

JsCmds.Run("chainAction('" + valueOfResponse + "');")

...