Методы доступа и мутации в ловкости - PullRequest
2 голосов
/ 18 января 2012

Я начинающий пользователь ловкости (около 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 Ответ

3 голосов
/ 21 января 2012

Вам нужно будет создать новый тип контента Dexterity с нуля и полностью переписать схему вашего архетипа в новую схему, которая наследуется от plone.directives.form и с типами полей вида zope.schema.

Для получения дополнительной информации см. Здесь: http://plone.org/products/dexterity/documentation/manual/developer-manual/schema-driven-types/referencemanual-all-pages

Например, объявление поля схемы вашего Архетипа будет выглядеть примерно так в Ловкости:

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

Типы контента «Ловкость» не получают автоматические средства доступа и мутаторы, такие как типы контента «Архетипы». Вместо этого вы просто получаете доступ к полю схемы, как к атрибуту.

Например:

script = myfolder.script

Если вы хотите создать те же аксессоры и мутаторы (как вы указали в поле Архетипы), вам придется создавать их вручную в своем классе Ловкости.

Например, что-то вроде:

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
...