5

Plone プロダクト (Products.Poi) を 2 番目のプロダクトで拡張する必要があります。拡張製品では、元のサブスクライバー イベントをオーバーライドする必要があります。同じ名前のイベントを override.zcml でサブスクライブしようとしましたが、2 番目のイベントは最初のイベントをオーバーライドしませんが、2 つすべてが実行されます。

ここhttp://plone.org/products/dexterity/documentation/manual/five.grok/core-components/eventsは不可能のようです:

アダプターとは異なり、より具体的なインターフェイスを使用してイベント サブスクライバーをオーバーライドすることはできません。イベントが発生すると、該当するすべてのイベント サブスクライバーが実行されます。

誰かがトリックを持っていますか?

ありがとうアレックス

4

2 に答える 2

6

Simone Orsi が解決策を教えてくれました: z3c.unconfigure

この製品は、zcml 構成を無効にすることを許可します。

これを使用するために、拡張された Poi プロダクトで次の手順を実行しました。

  1. setup.py に install_requires として「z3c.unconfigure」を追加
  2. update_tracker_watchers の新しい定義で event.py を作成します。
  3. overrides.zcml に、この行を追加して Products.Poi.events.update_tracker_watchers の構成を解除し、新しいイベントを登録します。

<include package="z3c.unconfigure" file="meta.zcml" />
<unconfigure>
    <subscriber
        for="Products.Poi.interfaces.ITracker
                  Products.Archetypes.interfaces.IObjectEditedEvent"
        handler="Products.Poi.events.update_tracker_watchers"
    />
</unconfigure>
<subscriber
    for="Products.Poi.interfaces.ITracker
              Products.Archetypes.interfaces.IObjectEditedEvent"
    handler=".events.update_tracker_watchers"
/>

于 2013-01-27T17:33:45.170 に答える
3

overrides.zcml を指定した場合、buildout で zcml オーバーライドも登録する必要がありますか? 見てみましょう: http://developer.plone.org/components/zcml.html?highlight=zcml#overridesそれは次のようになります: zcml = my.package-overrides

さらに、z3c.unconfigure パッケージの使用を試すことができます: http://pypi.python.org/pypi/z3c.unconfigure

于 2013-01-27T13:20:38.697 に答える