当我在ScalaJS中定义一个微调器并处理旋转值时,我无法像我期望的那样在事件中获得新的旋转值。根据JQuery UI文档,spin事件的第二个参数是包含value属性的ui对象。所以我定义了一个特征:
trait Number extends js.Object {
val value: Int = js.native
}
然后处理我的旋转事件:
jQuery("#mySpinner").spinner(js.Dynamic.literal(spin = { (e: HTMLInputElement, ui: Number) =>
log("Change: " + ui.value)
}: js.ThisFunction1[HTMLInputElement, Number, Any]))
但"价值"属性似乎不是ui对象的成员,因为我在我的日志语句中得到了以下异常。有人能告诉我我做错了吗?
未捕获的异常:scala.scalajs.runtime.UndefinedBehaviorError:An 检测到未定义的行为:undefined不是。的实例 java.lang.Integer中
答案 0 :(得分:0)
您说e: HTMLInputElement
但它应该是e: Event
答案 1 :(得分:0)
我怀疑问题是之前评论的组合。你是对的,因为你正在使用ThisFunction,第一个元素应该是某种元素。 (虽然,它真的是一个HTMLInputElement吗?这是一个稍微不寻常的元素类型来放置一个微调器。)
但是该元素将预先添加到函数参数中,而您已经替换一个。
换句话说,你有
(e: HTMLInputElement, ui: Number)
但它需要
(elem: HTMLInputElement, e:Event, ui: Number)
为了匹配预期的签名。所以在实践中,系统试图将事件的value
成员(当然不存在)转换为Integer。它发现value
未定义,尝试将其强制转换为整数,繁荣。
我不能说我100%肯定(并且IMO认为ui参数开始时很奇怪 - 我对那里的jQueryUI文档毫不怀疑),但是&# 39;我猜。尝试修复通话签名,看看错误是否消失......