【问题标题】:Scoped javascript callback in scala liftscala lift 中的作用域 javascript 回调
【发布时间】:2011-10-19 14:46:16
【问题描述】:

所以我一直在 Scala 中使用 Lift,并且非常享受它。我可能只是遗漏了 lift javascript 库中存在的东西,但我找不到任何使用作用域 javascript 回调的方法。似乎 Lift 处理回调的方式是将回调作为函数名传递,并让 Lift 返回一个 Call() 函数的 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 是作用域回调。有没有办法在我想念的电梯中做到这一点?为清楚起见,我已经能够获取此代码来调用提升函数,但不能正确处理回调。

谢谢。

编辑

在阅读 Lift 生成的 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)

但不允许我传递看起来像是被传递到 jQuery.ajax() 调用中的 theSuccess 或 theFailure。我的调查还在继续。如果有人在 is.jsCmd 上有任何好的资源,将不胜感激。

【问题讨论】:

  • 你试过SHtml.ajaxCall功能吗?不知道是不是你要找的。​​span>
  • 您没有得到答案的部分原因是这个问题确实令人困惑。我想我可以回答它,如果我能确定你想要什么。看来您希望 Javascript 函数使用 AJAX 在服务器端调用某些东西,然后服务器端部分将在完成时调用 chainAction(response) 并返回响应。对吗?

标签: ajax scala callback closures lift


【解决方案1】:

下面是一段代码,它将一个 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 + "');")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 2011-11-05
    • 2013-03-07
    • 1970-01-01
    相关资源
    最近更新 更多