ExtJS 4.1: 覆盖混合类

4
我有一个小问题: ExtJS 4.1使用名为“Ext.form.Labelable”的mixin来为所有表单字段呈现标签。我想更改labelableRenderTpl,即渲染模板,以在所有表单字段中添加额外的标签到右侧。 我该如何覆盖/扩展mixin?是否可能或者我必须为使用mixin的所有类覆盖labelableRenderTpl?
谢谢您的帮助和最好的问候! Manuel
1个回答

6

您可以在此处应用对Ext.form.Labelable的覆盖。

Ext.override(`Ext.form.Labelable`, {
    labelableRenderTpl: 'Your Template'
});

这段代码未经测试,但应该可以正常工作,因为mixin就像任何其他类一样被定义。您需要知道的是,现在使用此mixin的所有类都将使用新模板。对于labelable,这个列表很短:

  • Ext.form.FieldContainer
  • Ext.form.field.Base
  • Ext.form.field.HtmlEditor

如果您不想为所有内容更改它,您需要创建自己的mixin,例如通过扩展Ext.form.Labelable并覆盖Ext.form.field.Base以将其应用于所有字段。

您可以在这里找到有关覆盖的更多信息。(即使一些SO社区似乎不喜欢这个问题,对于您的情况,您可能会在其中找到一些有价值的信息

更新

正如您已经猜到的那样,问题在于mixin已经复制到类中,而override被应用,因此这完全取决于时间,并且可能最终导致硬匹配。我建议您从Ext.form.Labelable mixin继承,并通过覆盖实现将此新mixin应用于您需要的所有类。


你好,非常感谢你的回答。不幸的是,使用 Ext.override 覆盖混合类并不能生效。它对 FieldContainerBaseHtmlEditor 没有影响。我想这是因为在覆盖混合类时,该混合已经被应用到了这些类上?我认为唯一的解决办法就是直接在这些类中覆盖混合方法? - mesx
1
如果你已经阅读了我发布的链接,你就会知道当一个mixin方法被混合进来时是无法被覆盖的。我现在已经测试过了,必须承认似乎无法覆盖mixin。无论是override还是prototype都不能胜任这项工作。这真是一种奇怪的行为...我稍后会再次回顾它并给你反馈。 - sra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接