javascript - 斯卡拉JS : Call a Javascript function on an element

标签 javascript scala scala.js

我有以下问题。我想使用 https://github.com/aehlke/tag-it/在我的项目中。但是我不确定我应该如何实现 github 页面上给出的以下示例:

<script type="text/javascript">
$(document).ready(function() {
 $("#myTags").tagit();
});
</script>

<ul id="myTags">
 <!-- Existing list items will be pre-added to the tags -->
 <li>Tag1</li>
 <li>Tag2</li>
</ul>

到目前为止,我能够操作该对象:

val document = js.Dynamic.global.document
document.getElementById("myTags").innerHTML = "Test"

这行得通! 测试 正在呈现。

当我调用 tagit() 时,我被告知 tagit 不是一个函数

val document = js.Dynamic.global.document
document.getElementById("myTags").tagit()

当我使用 chrome java 脚本控制台执行“相同”调用时,一切正常:

$("#myTags").tagit();

有人可以解释我做错了什么吗?提前致谢!

编辑

不是tag-it或者jquery没有加载的问题。 chrome 控制台再次工作。这也不是加载问题。即使在所有内容加载 100% 后单击按钮,它也不起作用。

编辑

添加了我的部分构建定义,这样每个人都可以看到依赖关系是正确的:

.jsSettings(
      jsDependencies ++= Seq(
        "org.webjars" % "bootswatch-yeti" % "3.3.5" / "js/bootstrap.js" minified "js/bootstrap.min.js" dependsOn "jquery.js",
        "org.webjars" % "jquery-ui" % "1.11.4" / "jquery-ui.js" minified "jquery-ui.min.js" dependsOn "jquery.js",
        "org.webjars" % "tag-it" % "2.0" / "js/tag-it.js" dependsOn "jquery.js" dependsOn "jquery-ui.js"
      ),
      libraryDependencies ++= Seq(
        "io.github.widok" %%% "widok" % "0.2.2" exclude ("org.webjars", "bootstrap"),
        "be.doeraene" %%% "scalajs-jquery" % "0.8.0",
        "com.lihaoyi" %%% "scalatags" % "0.4.6",
        "org.webjars" % "bootswatch-yeti" % "3.3.5",
        "org.webjars" % "font-awesome" % "4.4.0",
        "org.webjars" % "jquery-ui-themes" % "1.11.4"
      ),
      persistLauncher := true
    )

最佳答案

最初,你的问题是

// Scala.js code
document.getElementById("myTags").tagit()

“相同”
// JavaScript code
$("#myTags").tagit();

相反,它与你猜怎么着一样?

// JavaScript code
document.getElementById("myTags").tagit();

这是无效的,因为 tagit() 不是 getElementById 返回的 HTMLElement 的方法。 tagit()$ 函数返回的 JQuery 对象的(经过优化的)方法。

您可以使用以下方式以动态类型的方式获取 $ 函数:

// Scala.js code
val $ = js.Dynamic.global.$

然后您可以编写与 jQuery 调用相同的:

// Scala.js code
$("#myTags").tagit()

找到的解决方案本质上是相似的,因为 jQuery 对象等同于 $。但是返回的元素是一个 JQuery 对象,静态 没有 tagit() 方法,这就是你需要转换它的原因到 js.Dynamic

另一种方法是使用以下命令键入 tagit() 方法 pimp:

// Scala.js code
@js.native
trait JQueryTagIt extends js.Object {
  def tagit(): Unit = js.native
}

implicit def tagItExtensions(jq: JQuery): JQueryTagIt =
  jq.asInstanceOf[JQueryTagIt]

有了它,您可以更简单地做到:

// Scala.js code
jQuery("#myTags").tagit()

它会被静态类型检查。

关于javascript - 斯卡拉JS : Call a Javascript function on an element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32990206/

相关文章:

javascript - 当 Object.assign() 与其他操作结合使用时,Ngrx 可观察对象不会对状态存储更改使用react

javascript - pdftron复制错误的文本

Scala (Play 2.4.x) 如何使用@inject() 注解调用类

scala - 验证 sbt 安装时出错

javascript - 如何直接在 scala.js 中嵌入 javascript 代码?

JQuery ajax 调用 Scala.js

javascript - key123 在 javascript 函数中包含什么或含义

scala - Play 2 : How to parse a dynamic list of form inputs in Scala controller?

authentication - 在 scalajs 的 Diode 库中,Action、AsyncAction 和 PotAction 有什么区别,哪些适合身份验证?

javascript - 在某些情况下数组未填充