Jquery 如何在scala.js中调用$.modal.close()
我用它来进行模态对话。使用Scala.js,如何调用相同的Javascript来关闭Scala中的模式对话框?谢谢 更新#1 与我一起使用创建了这些样板来配置模态对话框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
@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
是$
的“静态”部分的属性,因此您应该pimpJQueryStatic
而不是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(…)
。