gpt4 book ai didi

plone - 如何覆盖 ore.viewlet.core.FormViewlet 中的 zope.formlib @form.action 方法

转载 作者:行者123 更新时间:2023-12-01 07:36:10 25 4
gpt4 key购买 nike

总结:

  • Plone 版 3.3.4
  • 产品.PloneGetPaid 0.8.8
  • ore.viewlet 0.2.1

我正在尝试覆盖继承自 ore.viewlet.core.FormViewlet 的 viewlet 类。它有两个用 @form.action 修饰的方法(从 zope.formlib 导入)。我只需要覆盖其中一个。如果我也没有定义另一个,则它的操作不可用。所以我定义了它,试图简单地传递父类的返回值。但随后我得到一个 TypeError: 'Action' object is not callable

详情:

具体来说,我正在重写 Products.PloneGetPaid.browser.cart.ShoppingCartActions,其定义如下:

class ShoppingCartActions( FormViewlet ):

我定义了重写类来继承它。两个装饰方法是:

@form.action(_("Continue Shopping"), name='continue-shopping')
def handle_continue_shopping( self, action, data ):

@form.action(_("Checkout"), condition="doesCartContainItems", name="Checkout")
def handle_checkout( self, action, data ):

我真的只关心覆盖第一个。我想留下另一个。这两个@form.action 方法在购物车管理页面的“后续步骤” View 中生成“继续购物”和“结帐”按钮。如果我只在我的子类中定义“继续购物”方法,“结账”按钮就会消失。所以我尝试像这样定义 Checkout 方法:

@form.action(_("Checkout"), condition="doesCartContainItems", name="Checkout")
def handle_checkout( self, action, data ):
return super( ShoppingCartActions, self ).handle_checkout(action, data)

但是我得到了这个错误:

2011-05-20 17:01:40 ERROR Zope.SiteErrorLog http://localhost:8080/obrien/@@getpaid-cartTraceback (innermost last):
Module ZPublisher.Publish, line 119, in publish
Module ZPublisher.mapply, line 88, in mapply
Module ZPublisher.Publish, line 42, in call_object
Module Products.PloneGetPaid.browser.cart, line 46, in __call__
Module zope.viewlet.manager, line 104, in update
Module ore.viewlet.core, line 15, in update
Module Products.PloneGetPaid._patch, line 44, in update
Module zope.formlib.form, line 750, in update
Module zope.formlib.form, line 594, in success
Module plonetheme.obrienskin.browser.cart, line 23, in handle_checkout
TypeError: 'Action' object is not callable

这让我觉得一定有一些技巧可以覆盖和继承用 @form.action 修饰的方法。

如有任何提示,我们将不胜感激。

谢谢!

最佳答案

@form.action 将方法包装到 form.Action 实例中,并将其绑定(bind)到 success_handler 属性。所以你的代码应该是这样的:

@form.action(_("Checkout"), condition="doesCartContainItems", name="Checkout")
def handle_checkout( self, action, data ):
return super(ShoppingCartActions, self).handle_checkout.success_handler(
self, action, data)

关于plone - 如何覆盖 ore.viewlet.core.FormViewlet 中的 zope.formlib @form.action 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6078913/

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