Ktjs 使用现有的 Js 库

作者: 何晓杰Dev | 来源:发表于2019-05-20 16:16 被阅读19次

    在 Ktjs 的开发过程中,经常会遇到要使用 js 现有模块的问题,我们不可能在 Kotlin 上完整的造一套新的轮子。Kotlin 的文档里有一些相应的操作,不过并不能直接拿来用,直接拿的后果就是被坑得体无完肤,还是得自己爬坑。程序员不爱写文档或者说写不好文档的梗被发挥得淋漓尽致:(

    好了,那我们倒底要如何来使用一个第三方的 js 呢?下面以 jquery 为例来讲述。

    首先我们需要将 jquery.js 转换成 jquery.kt,以使得 Kotlin 可以正常读取 jquery 的导出方法,这一步需要借助 ts2kt 工具,使用以下命令来进行安装:

    $ sudo npm -g install ts2kt
    

    完成后,我们需要找到 jquery 的 ts 定义,在 DefinitelyTyped(点击进入) 内即可找到,这个仓库超大,github 是无法完全展示列表的,所以只能依靠搜索的功能来找到所需的定义。

    jquery.d.ts 保存到本地,然后使用命令进行转换:

    $ ts2kt -d headers jquery.d.ts
    

    执行完毕后将生成一个 jquery.kt,这个文件即是 jquery 与 kotlin 代码之间的桥梁。


    然后我们就可以使用它了,需要注意的是,当我们使用了任意第三方库时,都需要在 html 内进行引用:

    <script type="text/javascript" src="lib/jquery-2.0.0.min.js"></script>
    

    然后我们把页面补完,写个最简单的 div 就好:

    <div id="root"></div>
    

    然后在 kotlin 代码内就可以如此来写:

    `$`("#root")[0]?.innerHTML = "<h1>Hello Ktjs</h1>"
    

    千万不要以为这是 js,它确确实实是 Kotlin 代码。

    如果需要同时使用 kotlinx-html-js 来生成页面,也可以这样写:

    val div = document.create.div {
        h1 { text("Hello Ktjs") }
        button {
            text("Click Me!")
            onClickFunction = { println("Clicked!") }
        }
    }
    `$`("#root")[0]?.appendChild(div)
    

    同样的,如果要给页面中的对象绑定事件,可以使用以下代码:

    `$`("#btn")[0]?.onclick = { println("Clicked!") }
    

    相关文章

      网友评论

        本文标题:Ktjs 使用现有的 Js 库

        本文链接:https://www.haomeiwen.com/subject/yvikzqtx.html