2011-01-20 7 views
2

私はCometコールバック用のJavascriptを生成しようとしています。私のコードは動作しますが、実際には必要ないいくつかの追加変数を使用する必要があります。問題は、Callから返される配列内の要素にアクセスする方法がわかりません。リフトコールから返された配列にアクセスする方法

JsCrVar("node" + c.id, Call("dataTable.fnAddData", 
     JsArray(Text(c.name), 
       Text(c.initials), 
       makeDeleteButton(c)), 
     Num(0))) & 
JsCrVar("row" + c.id, Call("dataTable.fnGetNodes", JsVar("node" + c.id + "[0]"))) & 
SetExp(JsVar("row" + c.id + ".id"), Str(c.id.toString)) 

これはJavaScriptを好き発生(読みやすくするためにインデント)、次のとおりです。

var node2 = dataTable.fnAddData(["Test User", 
           "TU", 
           "<button onclick=\"liftAjax.lift_ajaxHandler(&quot;F306228675550KFT=true&quot;, null, null, null); return false;\">delete</button>"] 
           ,0); 
var row2 = dataTable.fnGetNodes(node2[0]); 
row2.id = "2"; 

次のように私は生成したいコードは次のとおりです。

dataTable.fnGetNodes(dataTable.fnAddData(["Test User", 
           "TU", 
           "<button onclick=\"liftAjax.lift_ajaxHandler(&quot;F306228675550KFT=true&quot;, null, null, null); return false;\">delete</button>"] 
           ,0)[0]).id = "2"; 
を行う方法
  1. 0返された配列からの要素ですか?
  2. 返されたオブジェクトからサブ要素 'id'を取得しますか?

答えて

2

Callから返された配列のn番目のメンバーを返すために独自のカスタムクラスを作成する必要があると思います。

case class JsRetArray(array: JsExp, n: Int) extends JsExp { 
    def toJsCmd = array.toJsCmd + "[" + n + "]" 
} 

次に、あなたが行うことができます:

.toJsCmdと呼ばれ、
Call("dataTable.fnGetNodes", 
    JsRetArray(Call("dataTable.fnAddData", 
        JsArray(Text(c.name), 
          Text(c.initials), 
          makeDeleteButton(c)), 
        Num(0)), 
       0) 
    ) ~> Id === 2 

、利回り:

dataTable.fnGetNodes(dataTable.fnAddData(["Test User", 
             "TU", 
             "<button onclick=\"liftAjax.lift_ajaxHandler(&quot;F306228675550KFT=true&quot;, null, null, null); return false;\">delete</button>"] 
        ,0)[0]).id = 2 
+0

私は最初の 'dataTable.fnAddData' と思い、このような何かを試してみてください'dataTable.fnGetNodes'にする必要がありますか? –

+0

正解!キャッチをありがとう! – Aaron

+0

受け入れてください!洞察に感謝します! –

関連する問題