- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在试用 scalajs,但对如何使用 org.scalajs.dom.html 包访问 DOM 元素感到很困惑。通过反复试验,我发现有些元素需要使用 asInstanceOf
转换为特定类型,但有些则不需要。是否有关于何时何地需要使用 asInstanceOf
的通用规则?
例如,假设我有一个 ID 为 myinput
的 input
元素。为了访问输入的值,我需要使用 asInstanceOf
:
val content = document.getElementById("myinput").asInstanceOf[html.Input].value
但是当需要在我的div
id contentdiv
中显示content
时,编译器并没有在我没有使用时报错div
元素上的 asInstanceOf
:
val mydiv = document.getElementById("contentdiv")
mydiv.innerHTML = content
此外,是否有一个中心位置可以找到所有可能的 asInstanceOf
参数并将它们映射到实际的 HTML 元素?
最佳答案
getElementById
的签名是
def getElementById(id: String): DOMElement
和DOMElement
定义为
trait DOMElement extends js.Object {
var innerHTML: String = js.native
def appendChild(child: DOMElement): Unit = js.native
}
因此,无论何时您调用 getElementById
你得到一个DOMElement
返回,您可以对其执行的唯一操作是 innerHTML
和 appendChild
.
这就是为什么您的最后一个示例无需显式转换即可工作的原因。
但是DOMElement
是一个非常通用的类型。有时您知道 getElementById
将返回 - 比如说 - 一个 <input>
元素。
那时你可以使用 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.
不用说了,使用asInstanceOf
需要小心.如果你错了,这次编译器将无法将你从运行时崩溃中拯救出来。
关于scala - 什么时候使用 asInstanceOf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40505041/
我正在试用 scalajs,但对如何使用 org.scalajs.dom.html 包访问 DOM 元素感到很困惑。通过反复试验,我发现有些元素需要使用 asInstanceOf 转换为特定类型,但有
在下面的代码中,是否可以在不使用 asInstanceOf 的情况下重新表述?我发现了一些应该避免使用 asInstanceOf/isInstanceOf 的样式指南建议,并且我设法清理了我的代码,除
我想编写一个转换为类型 A 的函数,其中 A 可以是例如List[Int],或更复杂的参数化类型,如 Map[Int, List[Int]]。 def castToType[A](x: Any): A
关于如何在不作弊和不使用 asInstanceOf 的情况下完成以下操作,我画了一个空白. 假设我有一些任意密封类型的对象,每个对象都有自己的类型成员。 sealed trait Part { t
我收到 not found: value Duck class Type class Value(val t: Type) class Duck extends Type {
考虑这个(有点做作的)例子: abstract class Obj[A, B] { def id: Long def parent: B } abstract class TopLev
如果您用这段非常糟糕的代码打扰 Scala 编译器(2.9.1 或 2.10.0-M7)... null.$asInstanceOf[Int] ...它抛出断言失败。问题:什么是 $asInstanc
在我的团队中,我经常看到队友在写作 list.filter(_.isInstanceOf[T]).map(_.asInstanceOf[T]) 但这对我来说似乎有点多余。 如果我们知道过滤列表中的所有
当我写我的 recent answer我还尝试以更“实用”的方式解决问题,但遇到了以下问题: scala> "1".asInstanceOf[Int] java.lang.ClassCastExcep
目前我的代码需要类转换 val dataWriter: BytesDataWriter = createDataWriter def createDataWriter(p: SomeClass) =
我试图回答 this问题,因为我以为我知道答案。 事实证明,我还不够了解:/ 这是我做过的一个测试: class Inst[T] { def is(x: Any) = scala.util.Try
这个问题在这里已经有了答案: What is happening with 0.asInstanceOf[B] in Scala reduceLeft implementation (2 个答案)
根据设计,我们确信我们有一个 HourlyDateFormat 的实例。 在这种情况下如何避免调用 asInstanceOf(即如何帮助编译器推断类型)? sealed trait Storage
我正在阅读 Akka Futures Guide我看到这句话: Also note that the Future returned by an Actor is a Future[Any] sinc
在 PlayFramework 2.4 中,我尝试将所有 Controller 方法转换为 JavaScript 路由。 val jsRoutesClass = classOf[routes.java
为什么 asInstanceOf 不抛出 ClassCastException ? scala> List("a").asInstanceOf[List[Int]] res34: List[Int]
这是我的代码的简化版本。 如何避免调用asInstanceOf (因为这是一个糟糕的设计解决方案的气味)? sealed trait Location final case class Single(
尝试将 String 转换为 Double 显然会失败: scala> Try("abc".asInstanceOf[Double]) res11: scala.util.Try[Double] =
尝试将 String 转换为 Double 显然会失败: scala> Try("abc".asInstanceOf[Double]) res11: scala.util.Try[Double] =
我有一个 Scala 类,它从 JOSN 模板文件中读取格式化信息,并从另一个文件中读取数据。目标是格式化为模板文件指定的 JSON 对象。我正在使用布局,但现在我想将输出类型设置为模板中的类型(即,
我是一名优秀的程序员,十分优秀!