我正在尝试为bootstrap popover函数创建一个可以使用多达11个可选参数的外观。在我的scalajs代码中,我想只传递我需要覆盖的参数,从库维护的合理默认值,即:PopoverOptions(animation = false)
,就像我在javascript中所做的那样。这似乎是建立立面的推荐方法,但它需要所有参数:
trait PopoverOptions extends js.Object {
val animation: String = js.native
val container: String = js.native
val content: String = js.native
...
}
object PopoverOptions {
def apply(animation: String, container: String, content: String, ...): PopoverOptions = {
js.Dynamic.literal(animation=animation, container= container, content = content, ...).asInstanceOf[PopoverOptions ]
}
}
看起来一种方法是为每个可能的参数排列定义一个应用,但是当有很多覆盖参数时,这会过快:
def apply(animation: String): ...
def apply(container: String): ...
def apply(animation: String, container: String): ...
...
创建带有大量覆盖参数的选项参数Facade的惯用方法是什么,这些参数通常具有合理的库维护默认值?
注意:两个答案都有优点/缺点,因此决定在不离开SO的情况下查看两种方式可能会有所帮助,所以这里是JSOptionBuilder方法的摘要:
import org.querki.jquery.JQuery
import org.querki.jsext._
@js.native
trait PopoverOptions extends js.Object
object PopoverOptions extends PopoverOptionBuilder(noOpts)
class PopoverOptionBuilder(val dict:OptMap) extends JSOptionBuilder[PopoverOptions, PopoverOptionBuilder](new PopoverOptionBuilder(_))
{
def animation(v:String) = jsOpt("animation", v)
def container(v:String) = jsOpt("container", v)
def content(v:String) = jsOpt("content", v)
...
}
使用:PopoverOptions.animation("yay").container("container").content("bottom")._result
答案 0 :(得分:1)
您可以使用Scala的参数默认值,并结合Veuillez entrer votre année de naissance :
2012
Veuillez entrer votre mois de naissance (de 01 à 12) :
30
Veuillez entrer votre mois de naissance (de 01 à 12) :
02
Veuillez entrer votre jour de naissance (de 01 à 31) :
30
Veuillez entrer votre jour de naissance (de 01 à 31) :
30
Veuillez entrer votre jour de naissance (de 01 à 31) :
30
Veuillez entrer votre jour de naissance (de 01 à 31) :
10
Confirmation de votre année de naissance: 10-2-2012
个元素类型,如下所示:
js.UndefOr
然后,您可以按照自己的意愿拨打object PopoverOptions {
@inline
def apply(
animation: js.UndefOr[String] = js.undefined,
container: js.UndefOr[String] = js.undefined,
content: js.UndefOr[String] = js.undefined,
...): PopoverOptions = {
val result = js.Dynamic.literal()
animation.foreach(result.animation = _)
container.foreach(result.container = _)
content.foreach(result.content = _)
...
result.asInstanceOf[PopoverOptions]
}
}
。
在定义网站上有点冗长,但它会完成工作。
答案 1 :(得分:1)
另一种方法是使用为此目的而创建的JSOptionBuilder。 (我写了很多jQuery外观,他们总是有这个问题。)JSOptionBuilder并不像过去那样重要(这是" |&之前的一个主要问题。 #34;运营商介绍),但我仍然发现它通常是处理复杂外墙的最佳方式。
此处the full description of this approach。 (请注意,这非常详细 - 上半部分是关键内容,其余部分涉及所有有些常见的边缘情况。)