在 z3c.form 中覆盖 CalendarDateConverter



z3c.form注册了一个转换器,如下所示:

<adapter
  factory=".converter.DatetimeDataConverter"
  />

是否可以使用 overrides.zcml 在 Plone 中覆盖此转换器?需要为overrides.zcml提供什么样的输入才能覆盖它?如果一个复制接口与.py代码中的定义匹配:

class DatetimeDataConverter(CalendarDataConverter):
    """A special data converter for datetimes."""
    zope.component.adapts(
        zope.schema.interfaces.IDatetime, interfaces.IWidget)

还有其他非猴子补丁方法来覆盖 z3c.converters?

我只需为更具体的接口注册新转换器:

 <adapter
     factory=".myconverter.MyDatetimeDataConverter"
     for="zope.schema.interfaces.IDatetime
          z3c.form.interfaces.ITextWidget"
     />

我以ITextWidget为例,为要使用自定义转换器的小部件注册它。

替代将适配器替换为具有相同注册的适配器。就像常规 ZCML 文件中的<adapter />注册一样,如果需要,它将从工厂对象获取它(多)适应的接口和它提供的接口,因此如果您在自己的转换器上使用.adapts(),则无需在<adapter />注册中重复该信息。

最新更新