plone:启用/禁用标记行为后如何重新注册视图

plone:启用/禁用标记行为后如何重新注册视图,plone,dexterity,Plone,Dexterity,我创建了一个视图,如果启用了行为,该视图应该可用 from behaviors import IMyBehavior class View(grok.View): grok.context(IMyBehavior) grok.require('zope2.View') grok.name('my-view') 我还将该行为添加到configure.zcml中 <include package="plone.behavior" file="meta.zcml"

我创建了一个视图,如果启用了行为,该视图应该可用

from behaviors import IMyBehavior

class View(grok.View):
    grok.context(IMyBehavior)
    grok.require('zope2.View')
    grok.name('my-view')
我还将该行为添加到configure.zcml中

  <include package="plone.behavior" file="meta.zcml" />

  <plone:behavior
        title="My View Behavior"
        description="foobar"
        provides=".behaviors.IMyBehavior"
        />

在阅读了《我的主要标记行为》一节后,我认为这就足够了。但显然不是。 当我启用MyBehavior TTW,然后尝试打开我的视图时,该视图不可用

我意识到,如果在启用/禁用该行为后重新启动plone实例,它将按预期工作。我猜在启用行为TTW后,必须重新注册视图


现在的问题是如何做到这一点?

视图无法重新注册

在momemt Zope应用服务器启动并导入Python模块时,注册将写入Zope组件注册表。这是一次性操作,与您的代码相关,而不是与您的数据相关


更像是这个问题,听起来在这个过程中还有其他的东西崩溃了。可能内容类型实际上没有提供问题中的行为标记接口。这可能是因为有什么东西干扰了这个过程:启动时没有读取代码,或者plone.behaviors中存在内部错误。请参阅optilude关于如何测试标记接口是否可用的评论。

您是否可以检查您的内容的实例是否提供了IMyBehavior,例如install Products.PdbDebugMode,在其中一个实例上调用/@@pdb视图(或使用plone.app.debugtoolbar),然后检查例如IMyBehavior.providedBy(上下文)@optilude:我安装了plone.app.debugtoolbar,在重新启动服务器实例之前,IMyBehavior.providedBy(上下文)实际上为False。我还尝试了plone.app.versioningbehavior.behaviors.IVersioningSupport。在我重新启动之前,IVersioningSupport.providedBy(上下文)也为false,但是IVersioningSupport的功能在没有重新启动的情况下似乎可以正常工作。我打开了一个票证