2012-01-18 55 views
2

我是初學者的靈巧使用者(現在大約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到412的Plone

問候,

+1

你確定你需要一個訪問?敏捷性的一個要點是消除expliit或生成的訪問器/增變器代碼的需求。如果您需要提供字段值的方法,則可以使用Python屬性或描述符(在自定義內容類上)將字段/屬性/屬性接口背後的方法抽象爲set/get。 – sdupton 2012-01-18 19:06:05

+0

嗯。我不確定使用這些方法。我正在通過這個靈巧 - 開發人員手冊.readthedocs.org/en/latest/advanced/...但我不清楚 – WEBBYFOX 2012-01-19 10:04:43

+0

我試圖創建具有字段的內容類型,該字段需要頁面模板代碼並呈現在我的自定義視圖。這就是爲什麼我在我的舊原型中使用訪問器和增變器來使用zpt方法。 – WEBBYFOX 2012-01-19 10:31:09

回答

3

你將不得不從頭開始創建一個新的敏捷內容類型和完全重寫你的原型的模式,以從plone.directives繼承了一個新的模式。形式和字段類型形式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"), 
    ) 

敏捷的內容類型沒有得到自動訪問器和類似Archetypes內容類型的增變器。相反,您只需訪問模式字段就好像它是一個屬性。

例如:

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