2011-10-19 29 views
1

所以我一直在斯卡拉升降梯玩弄,我一直很享受它。我可能会错过升降机JavaScript库中存在的东西,但我一直无法找到任何使用范围JavaScript回调的方式。看来,处理回调的提升方式是将回调作为函数名称传递,并使提升返回一个JsCmd,即Call()的函数。斯卡拉升降机的范围JavaScript回调

我的升降代码是大量基于这个例子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) 

但不是让我通过theSuccess或theFailure看起来他们正在传递给jQuery.ajax()调用。我的调查继续。如果任何人有任何有关is.jsCmd的良好资源,将不胜感激。

+0

你试过了'SHtml.ajaxCall'功能?我不知道这是你在找什么。 –

+0

你没有得到答案的部分原因是这个问题真的很混乱。如果我能确定你想要什么,我想我可以回答它。看来你需要一个Javascript函数来使用AJAX在服务器端调用某些东西,然后服务器端部分在响应完成时调用'chainAction(response)'。那是对的吗? –

回答

0

下面是一段代码,它为页面添加了一个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 + "');")