2016-04-11 6 views
1

Benmümkün js.Dynamic

val obj1 = js.Dynamic.literal(attr1 = "x") 
val obj2 = js.Dynamic.literal(attr2 = "y") 

var ki nesneleri ve ben obj1 birleştirmek istiyoruz ve obj2 bir adres verim ve

{attr1 = "x", attr2 = "y"} 

mu js.Dynamic amacı için iki kişi birleştirmek mi böyle bir kombinasyon elde etme yöntemi?

cevap

3

Bunu yapan mevcut bir yöntem yoktur. ES6'da Object.assign var, ancak IE'de desteklenmiyor.

def mergeJSObjects(objs: js.Dynamic*): js.Dynamic = { 
    val result = js.Dictionary.empty[Any] 
    for (source <- objs) { 
    for ((key, value) <- source.asInstanceOf[js.Dictionary[Any]]) 
     result(key) = value 
    } 
    result.asInstanceOf[js.Dynamic] 
} 

Ve js.Dictionary soyut olduğu gibi sonuç örnekleme değiştirmek zorunda dışında artık sadece

mergeJSObjects(obj1, obj2) 
+0

İşleri mükemmel yapabilirsiniz:

Ben Scala.js içinde yeniden uygulamayı tavsiye class: val sonuç = js.Object.asInstanceOf [js.Dictionary [Any]] – user79074

+0

Hata, gerçekten de “val result = js.Dictionary.empty [Any]' olmalıydı. Cevabımı düzelttim. (kesinlikle değil! js.Object.asInstanceOf [js.Dictionary [Any]] ', yine de! Bu, global' Object' nesnesini tekrar tekrar kullandığınız anlamına gelir. – sjrd