Scala 什么时候使用替代?
我正在试用scalajs,对于如何使用org.scalajs.DOM.html包访问DOM元素感到非常困惑。 通过反复试验,我发现有些元素需要使用Scala 什么时候使用替代?,scala,scala.js,Scala,Scala.js,我正在试用scalajs,对于如何使用org.scalajs.DOM.html包访问DOM元素感到非常困惑。 通过反复试验,我发现有些元素需要使用asInstanceOf转换为某些类型,但有些元素不需要。关于何时何地需要使用asInstanceOf是否有一般规则 例如,假设我有一个id为myinput的input元素。为了访问输入值,我需要使用asInstanceOf: val content = document.getElementById("myinput").asInstanceOf[h
asInstanceOf
转换为某些类型,但有些元素不需要。关于何时何地需要使用asInstanceOf
是否有一般规则
例如,假设我有一个id为myinput
的input
元素。为了访问输入值,我需要使用asInstanceOf
:
val content = document.getElementById("myinput").asInstanceOf[html.Input].value
但是当需要在idcontentdiv
的div
中显示content
时,编译器没有抱怨我没有在div
元素上使用asInstanceOf
:
val mydiv = document.getElementById("contentdiv")
mydiv.innerHTML = content
另外,还有一个额外的好处,就是可以在中心位置找到所有可能的
参数的安装以及它们到实际HTML元素的映射
def getElementById(id: String): DOMElement
而doElement
定义为
trait DOMElement extends js.Object {
var innerHTML: String = js.native
def appendChild(child: DOMElement): Unit = js.native
}
因此,无论何时调用getElementById
都会返回一个doElement
,您可以对其执行的唯一操作是innerHTML
和appendChild
这就是为什么上一个示例在没有显式强制转换的情况下有效
但是DOMElement
是一种非常通用的类型。有时您知道getElementById
将返回一个
元素
这时,您可以使用asInstanceOf
将您拥有的额外知识告知编译器
document.getElementById("myinput").asInstanceOf[html.Input].value
^
|
hey compiler, I KNOW this is going to be an html.Input,
please let me do my things and explode otherwise.
不用说,在使用替代
时需要小心。如果您错了,编译器这次将无法将您从运行时崩溃中解救出来。要回答问题的第二部分:
是否有一个中心位置可以找到所有可能的参数的安装以及它们到实际HTML元素的映射
您可以在中搜索“extends HtmleElement”。有趣。innerHTML和appendChild有什么特别之处,它们包含在其他不包含的地方?这两种方法是DOM元素宇宙原型链中可能最大的一组常用方法吗?不,还有很多其他的东西:这里的答案只是提到了一些东西来保持答案的简短。@sjrd感谢您的参与。快速提问,我在库中找不到实际的domeElement
定义(我发布的定义来自reversi示例)。我错过了什么?哦,没关系,我得到了。它们都是原生js,因此它们被映射为js.native
,包括getElementById