首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使kotlin-js中的querySelector更方便和更安全。

使kotlin-js中的querySelector更方便和更安全。
EN

Code Review用户
提问于 2020-03-28 17:17:42
回答 1查看 102关注 0票数 2

我想让您看看我在kotlinjs中创建的扩展函数(1.3.61版):

代码语言:javascript
复制
inline fun  Element.queryHtmlSelectorOrNull(selectors: String): E? {
    return this.querySelector(selectors = selectors) as E?
}

inline fun  Element.queryHtmlSelector(selectors: String): E {
    return this.queryHtmlSelectorOrNull(selectors = selectors)
        ?: error("couldn't find element by selectors '$selectors'")
}

现在让我详细说明一下。我使用的是经典的javascript querySelector。此签名:

代码语言:javascript
复制
fun querySelector(selectors: String): Element?

有一些缺点/品质:

  • 这是可选的。
  • 例如,当强制强制转换为HTMLDivElement并且结果实际上为null时,我得到没有附加信息/错误消息的NullPointerException。示例: document.querySelector(".something-non-existent")作为HTMLDivElement //抛出
  • 我必须显式地将查询转换为我想要的特定元素(例如HTMLDivElement?HTMLDivElement)。

我的函数修复了一些问题,但是创建了新的问题:

  • 您可以显式地选择您需要的类型,或者编译器可以根据变量类型猜测它。示例: document.queryHtmlSelector(".something")或val元素: HTMLDivElement = document.queryHtmlSelector(".something")

缺点是这不起作用(需要显式设置类型):

代码语言:javascript
复制
val element = document.queryHtmlSelector(".something")

如果没有指定任何一个,但我想不出如何做到这一点,那么我可以将“默认”基类型“默认”为Element

我想要的东西,几乎可以取代原来的功能,只是增加更强的输入和更好的错误信息的好处。任何关于如何改进这一点的提示都将受到极大的赞赏。

EN

回答 1

Code Review用户

回答已采纳

发布于 2020-03-30 14:55:06

“如果没有指定任何元素,那么”默认“基类型到元素就很酷了,但是无法想出实现的方法。”事实上,不可能做到这一点,至少用同样的方法是不可能的。一个选项可以是有一个单独的方法来解决这个问题。document.queryHtmlSelectorRaw?或者等等实际上..。Element.querySelector,这让你回到了你开始时的样子。

我想要的东西,几乎可以取代原来的功能,只是增加了更强的输入和更好的错误信息的好处。任何关于如何改进这一点的提示都将受到极大的赞赏。

考虑到这些要求,我会说,目前的方法几乎和你能得到的一样好。您有更强的类型(但您必须指定它)。如果为null,则有更好的错误消息。

我要考虑的唯一事情是:

  • 摆脱reified,我不相信你需要它。
  • 更改方法名称时,queryHtmlSelector很容易与内置的querySelector混淆。我可以推荐一下selectorselect这个名字吗?
  • 进一步改进错误消息,如No element found using selector '$selector' on $this
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/239567

复制
相关文章

相似问题

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