所以 Eric 是完全正确的,它可以比修改整个模板更容易完成,但我会在这种特殊情况下使用插件。我做了一个快速的:
Ext.define('Ext.form.field.plugin.NoNameAttribute', {
extend: 'Ext.AbstractPlugin',
alias: 'plugin.nonameattribute',
init: function(cmp) {
Ext.Function.interceptAfterCust(cmp, "getSubTplData", function(data){
delete data['name'];
return data;
});
}
});
请注意,使用的方法interceptAfterCust
是我的一种自定义方法,它通过将原始结果作为参数传递给拦截方法来修改现有方法。它还使用给定的原始对象(可以作为范围受到威胁)作为原始方法的范围。最简单的方法是将这些方法添加到Ext.Function
Ext.Function.interceptAfterCust = function(object, methodName, fn, scope) {
var method = object[methodName] || Ext.emptyFn;
return (object[methodName] = function() {
return fn.call(scope || this, method.apply(object, arguments));
});
}
这是一个有效的 JSFiddle,其中第一个字段在 dom 上不会有 name 属性,即使它存在于组件中。