【问题标题】:How to configure the boostrap sanitizer in scalajs如何在scalajs中配置boostrap sanitizer
【发布时间】:2020-01-20 20:08:51
【问题描述】:

我正在使用一个引导弹出框,其中包含一个画布标签作为其内容的一部分。我不知道为什么画布标签没有出现,直到我遇到这个post

所以我想我需要运行以下 javascript 代码:

$.fn.popover.Constructor.Default.whiteList.canvas = [];

如何在 scalajs 中做到这一点?

【问题讨论】:

    标签: twitter-bootstrap scala.js


    【解决方案1】:

    我尝试使用:

    js.Dynamic.global.$.fn.popover.Constructor.Default.whiteList.canvas = js.Array()
    

    但它会导致以下错误

    类型错误:$g.$ 未定义

    我想这与我使用 querki jquery-facade 的事实有关。因此,这使我找到了以下可行的解决方案:

        $.fn.asInstanceOf[js.Dictionary[js.Object]]("popover")
        .asInstanceOf[js.Dictionary[js.Object]]("Constructor")
        .asInstanceOf[js.Dictionary[js.Object]]("Default")
        .asInstanceOf[js.Dictionary[js.Object]]("whiteList")
        .asInstanceOf[js.Dictionary[js.Object]].put("canvas", js.Array())
    

    我添加了以下隐式类

    implicit class ObjectEnhancer(obj: js.Object) {
    
        class DynamicDict(obj: js.Object) extends Dynamic {
    
            private val dict = obj.asInstanceOf[js.Dictionary[js.Object]]
    
            def selectDynamic(name: String) = new DynamicDict(dict(name))
    
            def updateDynamic(name: String)(value: js.Object) = dict.put(name, value)
        }
    
        def asDyn = new DynamicDict(obj)
    }
    

    这让我可以用更简洁的方式来写这个:

        $.fn.asDyn.popover.Constructor.Default.whiteList.canvas = js.Array()
    

    【讨论】:

    • 混合使用我的解决方案和您的解决方案,您可以编写$.fn.asInstanceOf[js.Dynamic].popover.Constructor.Default.whiteList.canvas = js.Array(),而无需定义ObjectEnhancer
    【解决方案2】:

    很简单:

    import scala.scalajs.js
    
    js.Dynamic.global.$.fn.popover.Constructor.Default.whiteList.canvas = js.Array()
    

    【讨论】:

    • 当使用 jquery-facade 库时,这将不起作用,因为它会导致 TypeError。请参阅下面的答案以了解解决此问题的方法
    猜你喜欢
    • 2014-05-15
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2015-11-16
    • 2013-05-10
    • 2017-02-04
    • 2019-06-06
    相关资源
    最近更新 更多