我是一个为大客户开发自定义元素库的团队的一员(根据自定义元素规范v1)。到目前为止,我们已经开发了30个组件,其中一半是自主定制元素,另一半是定制的内置组件。
我们目前正处于重构和统一这些组件的API的阶段。几乎所有这些组件都具有自定义属性/属性。
使用标准HTML元素,惯例是使用data-
attributes,它们反映到元素的dataset
和从元素的HTMLElement
反射。
我知道自主自定义元素允许自由属性/属性命名,只要该名称与data-
已有的名称不冲突。
我理解的qazxsw poi属性背后的想法是确保没有库将开始实现可能与HTML标准的未来版本冲突的自定义属性。
但是,同样适用于属性名称。想象一下,HTML标准将获得一个新的通用属性,让我们抽象地称它为attr。当然,这也会反映到HTMLElement原型上的同名属性。
我的问题是:
data-
属性进行自定义属性实现,因此,通过使用dataset
而不是直接附加到元素的属性来避免冲突吗?dataset
中为属性定义自己的getter和setter?如果有任何不清楚的地方,请询问澄清。我试图让问题尽可能简洁。
我不担心我的自定义元素属性或属性将来可能成为HTMLElement
的预定义属性或属性。如果规范发生变化,那么我会处理它。但是试图猜测将来可能会使用的所有东西都是不可能的,也不值得我花时间。
我避免使用data-
属性来自定义元素。 dataset
值只是字符串,不能很好地转换。例如,如果我这样做:
el.dataset.dog = {woof:10};
然后我的标签得到这样的属性:data-dog="[object Object]"
和这个console.log(el.dataset.dog)
显示"[object Object]"
。这违背了许多可能需要处理对象的属性的目的。
我只为必须属性的东西创建属性。如果我必须允许HTML定义默认值,或者如果我需要创建一个CSS属性选择器,那么我将创建一个属性。但只有在这两个条件下。
我为我需要的一切创建属性(getter / setter)或函数。将任何格式的数据传递到属性或函数中更容易,然后将其转换为字符串以通过属性传入。
我甚至接管了一个或多个现有的HTMLElement属性和属性。这种情况很少见,但有时我需要对值执行某些操作,或者我只是不希望默认操作发生。再次,这是罕见的。