gpt4 book ai didi

plone - 在仅灵巧的环境中是否仍然需要 aq_inner(和 friend )?

转载 作者:行者123 更新时间:2023-12-02 03:32:54 25 4
gpt4 key购买 nike

我有一个浏览器 View ,在它的调用方法上有这样的东西:

def __call__(self):
context = aq_inner(self.context)
parent = aq_parent(context).
...

开头放个pdb玩玩,好像Dexterity没必要用是吧?

ipdb> self.context, id(self.context), self.context.__class__
(<Container at /plone/ausgaben>, 4651890160, <class 'plone.dexterity.content.Container'>)
ipdb> aq_inner(self.context), id(aq_inner(self.context)), aq_inner(self.context).__class__
(<Container at /plone/ausgaben>, 4651890160, <class 'plone.dexterity.content.Container'>)

所以无论是否使用aq_inner,结果都是一样的。

所以问题是:Dexterity(作为 self.context 并且在我们的项目中实际上一切都是基于 Dexterity 的)是否阻止我们必须用 aq_inner 和 aq_parent 等包装所有东西,而是直接使用对象或 __parent__ 指针?

最佳答案

与 AT 内容类型一样,DX 内容类型也是 aq 包装的。所以你将面临与 AT 相同的行为(问题 :-))。

正如 sdupton 在他的 aq_parent(instance) == instance.__parent__ 中所说的。父指针仍然通过获取来实现。

但与 AT 有细微差别。

如果您创建一个新的 DX 对象,则会发生以下情况:

  1. createContent将被调用创建 DX obj - 此时内容尚未 aq-wrapped。因此,如果您订阅 ObjectCreatedEvent,您将拥有一个非 aq 包装的对象。

  2. addContentToContainer将被调用,它将创建的 DX 内容添加到容器中。在 container._setObject ObjectAddedEvent 将被触发。如果您订阅此事件,您将拥有 aq-wrapped dx 内容。

这在 AT 中是不同的,当然在这种情况下会触发其他事件,但 AT 内容始终是 aq-wrapped(也在工厂中,同时添加新的 AT obj)

如果我误解了什么,请告诉我。

关于plone - 在仅灵巧的环境中是否仍然需要 aq_inner(和 friend )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25622113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com