2015-01-26 2 views

ответ

9

Возможные решения:

1) с js функции:

val header = js("({'content-type':'text/plain' , 'content-length' : 50 ...})") 

Примечание: круглые скобки являются обязательными

2) с dynamic:

val d: dynamic = object{} 
d["content-type"] = "text/plain" 
d["content-length"] = 50 

3) с js + dynamic:

val d = js("({})") 
d["content-type"] = "text/plain" 
d["content-length"] = 50 

4) с родной декларации:

native 
class Object { 
    nativeGetter 
    fun get(prop: String): dynamic = noImpl 

    nativeSetter 
    fun set(prop: String, value: dynamic) {} 
} 

fun main(args : Array<String>) { 
    var o = Object() 
    o["content-type"] = "text/plain" 
    o["content-length"] = 50 
} 
+0

спасибо за быстрый ответ первого решения может работать, но это не flexibl e i означает, что это жестко закодированное значение, и я получаю некоторые ошибки, а также вы можете проверить его. 2-е решение создает Kotlin.createObject (.....) на стороне javascript, я не могу передать это node.js, это не работает –

+0

Я обновил ответ. Вероятно, 3 - это то, что вам нужно. – bashor

+0

спасибо, братья 3 и 4 оба работали –

2

Еще одно из возможных решений:

object { 
     val `content-type` = "text/plain" 
     val `content-length` = 50 
} 

Кажется, что это не w ork больше с именами экранированных переменных.

+1

это «возможно», или он работает и делает то же самое? –

+0

Спасибо @JaysonMinard, я исправил свой ответ. – Sharp

1

Я новичок в Kotlin (хотя и не разработчик новичка), я слегка расширил ответ от @bashor на что-то, что выглядит более аккуратно для ключей, которые являются действительными идентификаторами Java, но все же допускают те, которые не являются. Я тестировал его с помощью Kotlin 1.0.1.

@native("Object") 
open class Object { 
} 

fun jsobject(init: dynamic.() -> Unit): dynamic { 
    return (Object()).apply(init) 
} 

header = jsobject { 
    validJavaIdentifier = 0.2 
    this["content-type"] = "text/plain" 
    this["content-length"] = 50 
} 
1

Вот вспомогательная функция для инициализации объекта с синтаксисом лямбда

inline fun jsObject(init: dynamic.() -> Unit): dynamic { 
    val o = js("{}") 
    init(o) 
    return o 
} 

Использование:

jsObject { 
    foo = "bar" 
    baz = 1 
} 

Emited Javascript код

var o = {}; 
o.foo = 'bar'; 
o.baz = 1; 
Смежные вопросы