我正在使用 Plone 4.1.4 并且我正在尝试获取模式的动态源。选择工作,我需要填充国家列表,这又取决于上下文对象。
我正在使用这个例子: http: //plone.org/products/dexterity/documentation/manual/developer-manual/advanced/vocabularies
例如,对于 IContextSourceBinder,将返回一个空字典而不是实际的上下文对象:
from zope import interface
from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
from zope.schema.interfaces import IContextSourceBinder
import zope.schema
from z3c.form import form
class CountryGenerator(object):
interface.implements(IContextSourceBinder)
def __call__(self, context):
#context is == {}
import pdb; pdb.set_trace()
return SimpleVocabulary([
SimpleTerm(value="not_selected", title=_("Country Not Selected"))
])
class IStep(interface.Interface):
region = schema.Choice(title=_("Select your country"),
required=True,
source=CountryGenerator,
default="not_selected")
class Step(form.Form):
fields = field.Fields(IStep)
label = _("Step")
description = _("Select your country")
当在 CountryGenerator.__call__() 方法中命中调试点并检查上下文对象时,后者结果只是一个空字典。
当我尝试在上面提到的文章中使用命名实用程序示例时,会发生类似的事情,上下文也有 {}。
谁能指出我可能做错了什么?
更新
调用表单的表单包装器的 ZCML 是
<browser:page
name="view"
for="Products.oldproduct.MyFolderishClass"
class=".file.RegionClass"
permission="zope2.View"
/>
RegionClass 继承自 Form 包装器的地方,可能是权限问题还是遍历问题?