自定义元素上的属性/属性名称

问题描述 投票:0回答:1

我是一个为大客户开发自定义元素库的团队的一员(根据自定义元素规范v1)。到目前为止,我们已经开发了30个组件,其中一半是自主定制元素,另一半是定制的内置组件。

我们目前正处于重构和统一这些组件的API的阶段。几乎所有这些组件都具有自定义属性/属性。

使用标准HTML元素,惯例是使用data-attributes,它们反映到元素的dataset和从元素的HTMLElement反射。

我知道自主自定义元素允许自由属性/属性命名,只要该名称与data-已有的名称不冲突。

我理解的qazxsw poi属性背后的想法是确保没有库将开始实现可能与HTML标准的未来版本冲突的自定义属性。

但是,同样适用于属性名称。想象一下,HTML标准将获得一个新的通用属性,让我们抽象地称它为attr。当然,这也会反映到HTMLElement原型上的同名属性。

我的问题是:

  1. 在这里避免未来冲突的建议方法是什么?它总是只使用data-属性进行自定义属性实现,因此,通过使用dataset而不是直接附加到元素的属性来避免冲突吗?
  2. 如果是这样,你将如何实现“布尔”数据属性(其中属性值无关紧要,状态是通过缺少/存在该属性实现的)?
  3. 是否可以在元素的dataset中为属性定义自己的getter和setter?

如果有任何不清楚的地方,请询问澄清。我试图让问题尽可能简洁。

javascript custom-element
1个回答
2
投票

我不担心我的自定义元素属性或属性将来可能成为HTMLElement的预定义属性或属性。如果规范发生变化,那么我会处理它。但是试图猜测将来可能会使用的所有东西都是不可能的,也不值得我花时间。

我避免使用data-属性来自定义元素。 dataset值只是字符串,不能很好地转换。例如,如果我这样做:

el.dataset.dog = {woof:10};

然后我的标签得到这样的属性:data-dog="[object Object]"和这个console.log(el.dataset.dog)显示"[object Object]"。这违背了许多可能需要处理对象的属性的目的。

我只为必须属性的东西创建属性。如果我必须允许HTML定义默认值,或者如果我需要创建一个CSS属性选择器,那么我将创建一个属性。但只有在这两个条件下。

我为我需要的一切创建属性(getter / setter)或函数。将任何格式的数据传递到属性或函数中更容易,然后将其转换为字符串以通过属性传入。

我甚至接管了一个或多个现有的HTMLElement属性和属性。这种情况很少见,但有时我需要对值执行某些操作,或者我只是不希望默认操作发生。再次,这是罕见的。

© www.soinside.com 2019 - 2024. All rights reserved.