Jquery 如何在scala.js中调用$.modal.close()

Jquery 如何在scala.js中调用$.modal.close(),jquery,scala.js,Jquery,Scala.js,我用它来进行模态对话。使用Scala.js,如何调用相同的Javascript来关闭Scala中的模式对话框?谢谢 更新#1 与我一起使用创建了这些样板来配置模态对话框 @js.native trait JQueryModal extends JQuery { def modal(params: JQueryModalOptions): Nothing = js.native } @js.native trait JQueryModalOptions extends js.Object ob

我用它来进行模态对话。使用Scala.js,如何调用相同的Javascript来关闭Scala中的模式对话框?谢谢

更新#1 与我一起使用创建了这些样板来配置模态对话框

@js.native
trait JQueryModal extends JQuery {
 def modal(params: JQueryModalOptions): Nothing = js.native
}

@js.native
trait JQueryModalOptions extends js.Object
object JQueryModalOptions extends JQueryModalOptionsBuilder(noOpts)
class JQueryModalOptionsBuilder(val dict: OptMap) extends JSOptionBuilder[JQueryModalOptions, JQueryModalOptionsBuilder](new JQueryModalOptionsBuilder(_)) {

在我的示例中,我可以向您展示如何使用语义UI模式实现这一点

我使用这个jqueryfacade:
“be.doeraene”%%“scalajsjquery”%%“0.9.1”

然后我用“猴子修补法”:

object SemanticUI {

  // Monkey patching JQuery
  @js.native
  trait SemanticJQuery extends JQuery {
    def modal(params: js.Any*): SemanticJQuery = js.native
  }

  // Monkey patching JQuery with implicit conversion
  implicit def jq2semantic(jq: JQuery): SemanticJQuery = jq.asInstanceOf[SemanticJQuery]
}
在代码中,您可以这样使用:

import org.scalajs.jquery.jQuery
import SemanticUI.jq2semantic

<button class="ui basic icon button"
              onclick={_: Event =>
                setTimeout(200) {
                  jQuery(".ui.modal").modal("show")
                }
              }>open dialog</button>
import org.scalajs.jquery.jquery
导入semanticu.jq2semantic
设置超时(200){
jQuery(“.ui.modal”).modal(“show”)
}
}>打开对话框

从预期的调用站点
$.modal.close()
,我们可以看到
modal
$
的“静态”部分的属性,因此您应该pimp
JQueryStatic
而不是
JQuery
JQueryStatic
$
的类型,而
JQuery
$(…)
返回的内容的类型

此外,
modal
字段可以与嵌套方法一起使用(如
close()
)或作为函数调用本身使用(如
$.modal(…)
)。因此,最好使用
apply
方法将其建模为特征

@js.native
trait JQueryModalStatic扩展了js.Object{
def apply(参数:JQueryModalOptions):Unit=js.native
def close():Unit=js.native
}
隐式类JQueryStaticToModalStatic(私有值jQuery:JQueryStatic.type)
扩展任意值{
@内联定义模式:JQueryModalStatic=
jQuery.asInstanceOf[js.Dynamic].modal.asInstanceOf[JQueryModalStatic]
}

当隐式类在作用域中(已导入)时,这允许调用
$.modal(…)
(由
apply
方法定义提供)和
$.modal.close()

是否使用外观库进行jQuery?如果是,哪一个?关于jquerymodal的同样问题。另外,您尝试了什么?请参阅更新#1。到目前为止,我已经创建了配置模式对话框的样板,即
@js.native trait JQueryModalOptions扩展js.Object对象JQueryModalOptions扩展JQueryModalOptions构建器(noOpts)
@js.native trait JQueryModal扩展JQuery{def model(参数:JQueryModalOptions):Nothing=js.native
。接下来,我将继续使用
$.modal.close()
看起来您找到了一个很好的解决方案。我唯一的补充意见是,在当前版本的Scala.js中,我的jsext库不再是非常必要的——它仍然有效,但有点不推荐。有关更新的方法,请参阅,特别是“匿名类”和“配置对象”部分。我相信你的建议对引导模式有效,因为它的调用方式。对于我正在使用的模式库,“close”是一个函数。我正在考虑使用间接调用,即
obj[x]
它工作得很好。但是,如果不添加
隐式def jq2JQueryModal(jq:JQuery):JQueryModal=jq.asInstanceOf,我就无法让它工作[JQueryModal]
@js.native trait JQueryModal扩展了JQuery{def modal(params:JQueryModalOptions):Unit=js.native}
就像我在代码中有
$(“#foo”).modal(defaultModalOptions)
一样。如果我正确理解了你的解释,我必须实现
JQuery
&
JQueryStatic
。是的,如果
$(“#foo”).modal(…)
是一个有效的调用,那么您还需要在
JQuery
上拉皮条
def modal(…)