2017-06-29 48 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

相關問題