ExtJS 4.1:覆盖mixins

mes*_*esx 4 html javascript extjs web

我有一个小问题:ExtJS 4.1使用名为"Ext.form.Labelable"的mixin为所有表单字段呈现标签.我想更改labelableRenderTpl,它是渲染模板,为所有表单字段添加额外的标签到右侧.我如何覆盖/执行mixin?是否可能或者我必须覆盖所有使用mixin的类的labelableRenderTpl?

感谢您的帮助和最好的问候!曼努埃尔

sra*_*sra 6

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

Ext.override(`Ext.form.Labelable`, {
    labelableRenderTpl: 'Your Template'
});
Run Code Online (Sandbox Code Playgroud)

这是未经测试但它应该工作因为mixin被定义为像任何其他类.您需要知道的是,现在所有使用此mixin的类都将使用新模板.如果是lableable这个列表很短

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

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

您可以在此处找到有关覆盖的更多信息.(即使某些SO社区似乎不喜欢这个问题,你可能会在那里找到一些有价值的信息)

更新

正如你已经猜到的那样,问题是mixin已被复制到类中,覆盖时间被应用,所以这完全是关于时间的,可能会以硬匹配结束.我建议你继承Ext.form.Labelablemixin并将这个新的mixin应用到你需要的所有类中,用你的新mixin覆盖实现.