如何从Kotlin调用一个JavaScript函数,期望一个jQuery ajax设置对象?
我需要转换下面的代码,它使用jQuery中的一些名为ajax设置 (在create()
调用内部的javascript中用于创建一个CouchDB数据库 )
$.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")
。 现在呢?
有几种方法。 首先,您可以创建一个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 { ... } ))
第三,你可以写输入的标题。 我不知道什么是Couch 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如何为选项声明头文件