在Scala JS中,JQuery UI微调器旋转事件与预期不同

时间:2015-07-07 12:29:14

标签: jquery-ui scala.js

当我在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中

2 个答案:

答案 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;我猜。尝试修复通话签名,看看错误是否消失......