首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlinx-html参考事件

Kotlinx-html参考事件
EN

Stack Overflow用户
提问于 2017-09-16 09:42:14
回答 1查看 241关注 0票数 1

我注意到代码库中的以下函数,它使用kotlinx html,很难完全理解:

代码语言:javascript
复制
private fun <E : HTMLElement> Tag.xrefImpl(prop: KMutableProperty0<E?>) = 
    this.consumer.onTagEvent(this, "ref", { prop.set(it.asDynamic()) })

据我从googling中了解到,asDynamic是一个kotlin-js方法,它简单地抑制了类型检查。好吧,但其余的还不清楚。文献资料对其内部结构不太详细,即consumerrefonTagEvent。最重要的是,为什么参数类型是KMutableProperty0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-16 13:00:33

这一小部分代码使用kotlin成语和高级特性相当密集,所以最好一步一步地检查它。

  • 首先,xRefImplTag的扩展函数,因此有了Tag实例,就可以调用这个新方法。
  • 第二,ref实际上是react属性,它允许获取对组件的引用。下面是来自反应文件的一个例子。

示例用法:

代码语言:javascript
复制
<input type="text"
       ref={(input) => { this.textInput = input; }} />

通过约定,ref接受引擎将调用的函数,并引用作为参数传递的组件。上面的代码使用以下lambda创建了一个ref on this标记(请记住,xrefImpl是一个扩展函数):prop.set(it.asDynamic())

  • 接下来,prop是一个静态类型的kotlin属性(这是KMutableProperty0的意思)。它有getset方法,在本例中它是用it引用分配的。因为it来自javascript,所以它的类型未知,因此是动态铸造
  • consumer.onTagEvent()只是绑定javascript属性和事件的kotlix内部方式。

例如,在这个框架中处理'onmouseleave‘是这样的:

代码语言:javascript
复制
consumer.onTagEvent(this, "onmouseleave") {
  console.log(it)
}

如果您去掉所有的kotlin并做出反应,代码this.consumer.onTagEvent(this, "ref", { prop.set(it.asDynamic()) })就会简单地执行prop = this.getComponent()。因此,该方法的目的是获取组件引用。

最后,由于参数是KMutableProperty0,它允许将组件绑定到字段,如下所示。

代码语言:javascript
复制
xrefImpl(this::component)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46252441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档