我有以下问题。我想在项目中使用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"
这可行!
Test
正在呈现。当我打电话给
tagit()
时,我被告知tagit is not a function
。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()
不是HTMLElement
返回的getElementById
的方法。 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()
并将对其进行静态类型检查。