2017-06-29 50 views
1

我需要转换下面的代码,它使用一些jQuery中称为ajax settings(这是在JavaScript中使用下面的create()调用中创建一个CouchDB database如何从Kotlin调用期望jQuery ajax设置对象的JavaScript函数?

$.couch.db("mydb").create({ 
    success: function(data) { 
     console.log(data); 
    }, 
    error: function(status) { 
     console.log(status); 
    } 
}); 

我已经定义了这些

@JsName("$") 
external val jq: JQuery 

val jCouch: dynamic get() = jq.asDynamic().couch 

但我被卡在如何转换javascript代码

jCouch.db.create("mydb")现在什么

回答

2

有几种方法。首先,可以创建一个dynamic对象并设置所要求的特性有:

val settings: dynamic = Any() 
settings.success = { data: dynamic -> console.log(data) } 
settings.error = { status: dynamic -> console.log(status) } 
jCouch.db("db").create(settings) 

(也可指定用于数据或状态相应类型)

其次,可以使用json功能:

jCouch.db("db").create(json(
    "success" to { ... }, // edit note: added missing comma 
    "error" to { ... } 
)) 

第三,你可以编写打字头。我不知道什么是沙发API,这样头看起来这样的:

external interface Db { 
    fun create(settings: DbCreateSettings) 
} 

external interface DbResult 

external interface DbError 

external interface DbCreateSettings { 
    val success: ((DbResult) -> Unit)? 
    val error: ((DbError) -> Unit)? 
} 

fun JQuery.db(name: String): Db = asDynamic().db(name) 

fun foo() { 
    jq.db("name").create(object : DbCreateSettings { 
     override val success = { it: DbResult -> console.log(it) } 
     override val error = { it: DbError -> console.log(it) } 
    }) 
} 

最后,你可以看到如何Kotlin stdlib声明标头选项

+0

十分感谢,这是非常有用 – ycomp

相关问题