敏捷中的访问者和变异者方法

时间:2012-01-18 14:44:19

标签: plone dexterity

我是敏捷的初学者(现在约2天)。我正在尝试将旧内容类型迁移到迁移网站过程中的dextertiy内容。

经典原型中的模式定义就像

TextField('script',
          searchable=0,
          mutator="write",
          accessor="__call__",
          edit_accessor="document_src",
          widget=TextAreaWidget(label="Page Template script",rows=40,cols=40),

我如何在灵活性中重新定义?我正在从Plone 252升级到Plone 412。

此致

1 个答案:

答案 0 :(得分:3)

您必须从头开始创建一个新的Dexterity内容类型,并将您的Archetype的Schema完全重写为一个新的模式,该模式继承自plone.directives.form并且字段类型为zope.schema。

有关详细信息,请参阅此处: http://plone.org/products/dexterity/documentation/manual/developer-manual/schema-driven-types/referencemanual-all-pages

例如,您的Archetype的架构字段声明在Dexterity中看起来像这样:

script = schema.TextLine(
        title=_(u"Page Template Script"),
    )

敏捷内容类型不会像Archetypes内容类型那样获得自动访问器和变更器。相反,您只需访问架构字段,就好像它是一个属性。

例如:

script = myfolder.script

如果要创建相同的访问器和mutator(就像在Archetypes字段中指定的那样),则必须在Dexterity类上手动创建它们。

例如:

class MyFolder(dexterity.Container):
    """ """
    grok.implements(IMyFolderSchema)

    def __call__(self):
        return self.script

    def edit_accessor(self):
        return self.script

    def write(self, value):
        self.script = value