gpt4 book ai didi

scala - 如何从 CometActor 更新 HTML 类

转载 作者:行者123 更新时间:2023-12-01 09:13:24 24 4
gpt4 key购买 nike

为了响应服务器上的一些异步事件,我想更新 HTML 节点的类以反射(reflect)其更新后的状态。我知道节点的 ID,以及我想将其更改为的类。我需要使用什么 JsCmd 来更新类?一般而言,我在哪里可以找到有关 JsCmd 及其作用的良好引用?

一个简单的例子:

case class UpdateClass(id: String, htmlClass: String)

class ClassUpdater extends CometActor {
override def lowPriority: scala.PartialFunction[scala.Any, scala.Unit] = {
case UpdateClass(id, htmlClass) =>
partialUpdate(Noop /* now what? */)
}

def render = NodeSeq.Empty
}

所以如果我有 HTML:

<html><body>
<lift:comet type="ClassUpdater"/>
<div id="foo" class="bar">insert text here</div>
</body></html>

如果我将消息 UpdateClass("foo", "baz") 发送到我的 ClassUpdater,我想要我的 div 的类更改为 baz

最佳答案

编辑: 我找到了更好的方法。旧代码现在更像是更复杂内容的蓝图。

看起来有一种不用 jQuery 的更直接的方法:

SetElemById("foo", JE.Str("baz"), "className")

转换为 JavaScript 调用

document.getElementById("foo").className = "baz";

请注意,JE.Str("baz") 可以是任何 JsExp,如果您也可以这样做

SetElemById("foo", JE.Str("baz"), "firstChild", "className")

这会改变第一个 child 的类(class)。 (参见:SetElemById)

您可以查看 JsCMD 的代码内置命令的其他可能特性。


但是,如果您想要更复杂的东西,这样的东西可能会对您有所帮助。它发送一个 jQuery 命令,将 #oldId 中的类更改为 newClass

  case class ChangeClassAtId(oldId: String, newClass: String) extends JsCmd {
def toJsCmd = """try {
$(""" + ("#" + oldId).encJs + """).attr("class", """ + newClass.encJs + """);
} catch (e) {}"""
}

在任何地方改变一个类的所有出现有点复杂:

case class ChangeClass(oldClass: String, newClass: String) extends JsCmd {
def toJsCmd = """try {
$(""" + ("." + oldClass).encJs + """).each(function(){
$(this).addClass(""" + newClass.encJs + """).removeClass(""" + oldClass.encJs + """);
});
} catch (e) {}"""
}

当然,您应该使用它而不是 Noop

关于scala - 如何从 CometActor 更新 HTML 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4070690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com