当前的实现可以大幅改进:

这些问题的根本原因是 Lit 没有默认的转换器来将 string 转换为 Date 对象。这正是自定义特性转换器的用武之地!自定义特性转换器可以通过提供将 string 特性转换为 Date 对象属性的方式来清理 date-display 的实现。

在这一步中,你将定义一个自定义特性转换器,它能够将日期字符串特性转换为 JavaScript Date 对象属性,以及反向转换。

定义自定义特性转换器

Permalink to "定义自定义特性转换器"

你会注意到编辑器面板中有一个新的空文件 date-converter.。使用它来定义一个返回转换器的函数。

date-converter.

Permalink to "date-converter."
import type {ComplexAttributeConverter} from 'lit';

export const dateConverter = (locale: string): ComplexAttributeConverter<Date> => {
return {
toAttribute: (date: Date) => {
return date.toLocaleDateString(locale);
},
fromAttribute: (value: string) => {
return new Date(value);
}
}
};
export const dateConverter = (locale) => {
return {
toAttribute: (date) => {
return date.toLocaleDateString(locale);
},
fromAttribute: (value) => {
return new Date(value);
},
};
};

简单特性转换器。

如果你的 toAttribute 只是 toString,那么你可以使用简单特性转换器而不是复杂特性转换器。

简单特性转换器是一个函数,等同于复杂特性转换器对象的 fromAttribute 方法。

恭喜!你刚刚定义了一个自定义特性转换器!有关更多信息,请参阅提供自定义转换器

在下一步中,你将让这个新转换器发挥作用。