如何使用 Scala.js 实现 jQuery 插件
How to implement a jQuery Plugin using Scala.js
Scala.js documentation 有一个很好的例子,说明如何实现 jQuery 门面,它也支持链接:
@js.native
trait JQueryGreenify extends JQuery {
def greenify(): this.type = ???
}
object JQueryGreenify {
implicit def jq2greenify(jq: JQuery): JQueryGreenify =
jq.asInstanceOf[JQueryGreenify]
}
然而据我所知,这个例子假设 greenify
插件已经在 Javascript 中实现。例如。喜欢
$.fn.greenify = function() {
this.css( "color", "green" );
return this;
}
如何在 Scala.js 中实现此插件?
有两种方法可以在Scala.js中定义"jQuery plugin"。第一个是安全且符合 Scala 风格的惯用方式,但仅供其他 Scala.js 代码使用。第二个有点难看,但是JavaScript代码可以用
对于Scala.js
在 Scala 和 Scala.js 中,实际 jQuery 插件所做的修补原型的事情是不鼓励的。相反,我们使用 隐式 类:
implicit class JQueryGreenify(val self: JQuery) extends AnyVal {
def greenify(): self.type = {
self.css("color", "green")
self
}
}
然后你可以简单地做
jQuery("#some-element").greenify()
当您在范围内有 JQueryGreenify
时(通常作为导入)。
此方法不会污染 jQuery 对象的实际原型。它是纯 Scala 抽象。它干净且安全,但这意味着它不能被 JavaScript 代码使用。
对于JavaScript
如果你需要从JavaScript调用greenify
,你实际上需要在jQuery.fn
对象上添加一个函数属性。由于该函数需要使用 this
参数,我们必须明确地将其归因于一个 js.ThisFunction
(另请参见 ):
js.Dynamic.global.jQuery.fn.greenify = { (self: JQuery) =>
self.css("color", "green")
self
}: js.ThisFunction
这基本上是问题中原始 JavaScript 代码的音译。
Scala.js documentation 有一个很好的例子,说明如何实现 jQuery 门面,它也支持链接:
@js.native
trait JQueryGreenify extends JQuery {
def greenify(): this.type = ???
}
object JQueryGreenify {
implicit def jq2greenify(jq: JQuery): JQueryGreenify =
jq.asInstanceOf[JQueryGreenify]
}
然而据我所知,这个例子假设 greenify
插件已经在 Javascript 中实现。例如。喜欢
$.fn.greenify = function() {
this.css( "color", "green" );
return this;
}
如何在 Scala.js 中实现此插件?
有两种方法可以在Scala.js中定义"jQuery plugin"。第一个是安全且符合 Scala 风格的惯用方式,但仅供其他 Scala.js 代码使用。第二个有点难看,但是JavaScript代码可以用
对于Scala.js
在 Scala 和 Scala.js 中,实际 jQuery 插件所做的修补原型的事情是不鼓励的。相反,我们使用 隐式 类:
implicit class JQueryGreenify(val self: JQuery) extends AnyVal {
def greenify(): self.type = {
self.css("color", "green")
self
}
}
然后你可以简单地做
jQuery("#some-element").greenify()
当您在范围内有 JQueryGreenify
时(通常作为导入)。
此方法不会污染 jQuery 对象的实际原型。它是纯 Scala 抽象。它干净且安全,但这意味着它不能被 JavaScript 代码使用。
对于JavaScript
如果你需要从JavaScript调用greenify
,你实际上需要在jQuery.fn
对象上添加一个函数属性。由于该函数需要使用 this
参数,我们必须明确地将其归因于一个 js.ThisFunction
(另请参见
js.Dynamic.global.jQuery.fn.greenify = { (self: JQuery) =>
self.css("color", "green")
self
}: js.ThisFunction
这基本上是问题中原始 JavaScript 代码的音译。