2011-10-19 6 views
1

私はScalaのリフトで遊んでいましたが、私はそれをたくさん楽しみました。私はちょうどリフトのjavascriptライブラリに存在するものを見逃しているかもしれませんが、スコープ付きjavascriptコールバックを使用する方法を見つけることができませんでした。コールバックを処理するリフト方法は、コールバックを関数名として渡し、リフトにJsCmdを返してCall()関数が返すようにしているようです。スカラリフトのスコープ付きjavascriptコールバック

マイリフトコードが重く、この例http://demo.liftweb.net/json_more に基づいており、私はajaxCall1とajaxCall2をしたいと思います

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

は、AJAXを持ち上げるために呼び出すことをちょっとのように私のjavascriptが見えています。リフトの例ではcallNoParam()、スコープ付きコールバックである場合はchainActionです。私が行方不明の揚力でこれを行う方法はありますか?明確にするために、私はリフト関数を呼び出すためにこのコードを取得できましたが、コールバックを正しく処理することはできませんでした。

ありがとうございました。

編集

リフト生成されたJavaScriptコードを読み込む際に、成功/失敗のコールバックのためのプレースホルダが実際にあるように、それが見えます。特に、

AllJsonHandler.is.jsCmd 

のjavascriptのこの行を生成しているリフトのこの行のように見える

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

でもないが、私はtheSuccessまたはtheFailureを通過させる、このメソッドを参照する

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

jQuery.ajax()呼び出しに渡されているように見えます。私の調査は続けられます。 is.jsCmdに誰かが良いリソースを持っていれば、それは高く評価されます。

+0

あなたは 'SHtml.ajaxCall'機能を試してみましたか?あなたが探しているものなのかどうかわかりません。 –

+0

あなたが答えを得ていない理由の一部は、その質問が本当に混乱しているということです。私はあなたが欲しいものを確かめることができるなら、私はそれに答えることができると思います。あなたはJavascript関数がAJAXを使ってサーバ側で何かを呼び出すようにしたいと思っています。そして、サーバサイドパートは、応答が完了したときに 'chainAction(response)'を呼び出します。あれは正しいですか? –

答えて

0

以下は、JavaScriptの機能doCallback#placeholder)をページに追加するコードです。この関数は、コンソールに行を出力し、サーバにajaxCallを返して、関数commandCallbackを返します。

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

、あなたが返すことができます。

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

関連する問題