我的最新问题是我已经有一个解决方案,它只是 感觉应该有更好的方法。
问题: 我想将PartialUpdate发送给彗星服务,我需要XML 转义字符串,以便在客户端使用它时获取 正确的结果。我目前有:
override def lowPriority = {
case v: List[TaskOwner] => {
partialUpdate(
taskOwners.foldLeft(JsCrVar("table", Call("$", Str("table#userTable"))) &
Call("table.dataTable().fnClearTable"))((r, c) => {
r & Call("table.dataTable().fnAddData",
JsArray(Str(Text(c.name).toString),
Str(Text(c.initials).toString),
Str(makeDeleteButton(c).toString)),
Num(0))
}) & Call("table.dataTable().fnDraw"))
}
}
这很好,但Str(Text(c.name).toString)
感觉不错
对我来说很啰嗦。现在,我可以创建一对隐含的
这个转换函数,但似乎应该有
已经在某个地方完成了,我只是不知道在哪里。所以,在
减少我写的代码的精神,我问是否有人知道
更好的方法,或者隐式转换已经存在
某处?
我见过solution here的引用。但是代码总结为:
def xmlToJson(xml: Elem): JsExp = {
// code to map XML responses to JSON responses. Handles tricky things like always returning
// js arrays for some fields even if only 1 element appears in the XML
}
答案 0 :(得分:1)
我不知道Str
做了什么,但也许你的意思是Str(xml.Utility.escape(c.name))
?
那么,怎么样:
def JsStrArray(strings: String*) = JsArray(strings map xml.Utility.escape map Str : _*)
然后使用
JsStrArray(c.name, c.initials, makeDeleteButton(c).toString)
MMMMM。它可能会错误地转义makeDeleteButton
的结果。无论如何,你可以玩它,看看看起来不错。
答案 1 :(得分:1)
可能更好的方法是转义名称,而不是:
JsArray(Str(Text(c.name).toString),
Str(Text(c.initials).toString),
Str(makeDeleteButton(c).toString))
使用
JsArray(Str(c.name.asHtml.toString),
Str(c.initials.asHtml.toString),
Str(makeDeleteButton(c).toString))
这可以通过在类中使用隐式来进一步减少:
implicit def elemToJsExp(elem: NodeSeq): JsExp = Str(elem.toString)
…
JsArray(c.name.asHtml,
c.initials.asHtml,
makeDeleteButton (c))