从 scala.js 调用 jquery .each 方法

Call jquery .each method from scala.js

此文档是否已过时? http://www.scala-js.org/doc/calling-javascript.html 似乎无法在 intellij 中做到这一点:

import org.scalajs.dom.html
import org.scalajs.dom
import org.scalajs.dom.raw.HTMLElement
import scala.scalajs.js
import js.JSConverters._

import fr.iscpif.scaladget.d3._
import fr.iscpif.scaladget.mapping._

import scala.scalajs.js
import scala.scalajs.js.annotation.JSExport
import org.scalajs.jquery.jQuery

/**
 * Created by IDEA on 31/10/15.
 */
@JSExport
object LearnD3 {
  @JSExport
  def main(div: html.Div): Unit = {
    jQuery("#list > li").each((x, y) => y)
  }
}

第一个dom.HTMLElement好像不存在。有 org.scalajs.dom.raw.HTMLElement,但即使我导入,也存在类型不匹配:

实际上,这一直只是一个概念性的例子,说明如何使用 ThisFunction——对于松散类型的 scala-js-jquery facade. (It's closer to the jquery-facade version,它实际上从来都不是正确的,尽管目前仍然需要 Element 而不是HTMLElement,因为那是 JQuery 文档所说的。我应该考虑是否应该收紧它;老实说我不确定。)

但基本上,这从来没有打算成为文字代码,而且我相信它从来没有像这样工作过。这只是 ThisFunction.

语法的说明

至于 HTMLElement,是的,现在在 raw 之下。您现在通常将其称为 dom.html.Element。在这方面,它 已经过时了。但无论如何,这个例子应该更多地被当作一个概念而不是文字代码。 (是的,该示例可能会使用重写;PR 通常很乐意接受。)

您需要指定参数的类型。以下代码有效:

val x = jQuery("#list > li").each((i: js.Any, y: Element) => y)

您可能会注意到索引 iAny 类型,通常您希望索引是 Int 类型。由于这类问题,jquery-facade 诞生了:jquery 的更强类型的门面。我强烈推荐它。 jquery-facade:

中的相同代码
 import org.querki.jquery._

 ... 

 val x = $("#list > li").each((y: Element, i: Int) => y)

或者,如果您不需要 i 索引:

 val x = $("#list > li").each((y: Element) => y)

或者您希望推断 y 类型:

 val x = $("#list > li").foreach(y => y)