首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在scala.js中实现jquery

在scala.js中实现jquery
EN

Stack Overflow用户
提问于 2015-01-21 11:13:08
回答 1查看 751关注 0票数 4

我正在尝试从scala.js调用jquery。我尝试过修改jquery库的实现方式,但到目前为止没有成功。因此,我定义了以下特性和包对象:

代码语言:javascript
复制
trait JQueryUI extends js.Object {

    def apply(selector: String): JQueryUI = ???
    val buttonset: js.Any = ???
}

package object jqueryui extends js.GlobalScope {
    val jQueryUI: JQueryUI = ???
}

然后添加一个JSApp如下:

代码语言:javascript
复制
object JQueryUIApp extends JSApp {
    def main(): Unit = {
        jqueryui.jQueryUI("#sports").buttonset
    }   
}

但是,在我的JavaScript控制台上,我得到了以下错误:

TypeError: ScalaJS.g"jQueryUI“不是函数(0,ScalaJS.g”jQueryUI“)(”#体育“)”扣式“

谁能告诉我我错过了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-21 12:15:34

通过在包对象中声明类似的val jQueryUI,可以告诉Scala.js这对应于JavaScript中的一个名为jQueryUI的全局变量。这不是真的:您要寻找的实际变量名为jQuery。您可以通过使用@JSName显式命名值来解决这一问题。

代码语言:javascript
复制
import scala.scalajs.js.annotation.JSName

package object jqueryui extends js.GlobalScope {
  @JSName("jQuery")
  val jQueryUI: JQueryUI = ???
}

但是,由于jQuery实际上是jQuery对象的扩展,所以我将使用扩展方法来定义scalajs-jqueryJQuery特性。这将允许对这两种用法(jQuery方法和jQuery方法)使用普通的jQuery。一般机制在呼叫JavaScript指南中被解释为“猴子修补”。在你的例子中,它看起来是这样的:

代码语言:javascript
复制
trait JQueryUI extends JQuery {
  val buttonset: js.Any = ???
}

object JQueryUI {
  implicit def jQueryUIExtensions(query: JQuery): JQueryUI =
    query.asInstanceOf[JQueryUI]
}

使用这些定义,您可以:

代码语言:javascript
复制
import org.scalajs.jquery._
import JQueryUI.jQueryUIExtensions

def main(): Unit = {
  jQuery("#sports").buttonset
}

注意,我使用的是普通的jquery.jQuery对象,它返回一个普通的JQuery对象,然后调用buttonset值,这个值是在JQueryUI中定义的。这是因为隐式转换jQueryUIExtensions的缘故。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28065804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档