如何访问电梯呼叫返回的阵列

时间:2011-01-20 17:58:19

标签: scala lift

我正在尝试为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”?

1 个答案:

答案 0 :(得分:2)

我认为你必须创建自己的自定义类来返回从Call返回的数组的第n个成员。尝试这样的事情:

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

然后你可以这样做:

Call("dataTable.fnGetNodes",
    JsRetArray(Call("dataTable.fnAddData",
                    JsArray(Text(c.name),
                            Text(c.initials),
                            makeDeleteButton(c)),
                    Num(0)),
               0)
    ) ~> Id === 2

,当使用.toJsCmd调用时,产生:

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