ExtJS 6.7 - 如何在每个表单组件上附加模糊和焦点事件?
ExtJS 6.7 - How to attach blur and focus events on every form copoment?
我想在字段聚焦时用自定义 css class 标记每个字段包装容器,并在字段模糊时删除 class。所以我想将 focus/blur 事件方法附加到我添加到任何表单的每个表单字段组件。
在 Ext 4 中我是这样做的:
Ext.ComponentManager.all.on('add', function(map, key, item) {
// Check if item is a Window and do whatever
if (item instanceof Ext.form.field.Base) {
item.on('focus', function(theField) {
var parentDom = null; //theField.bodyEl.findParent('.x-form-fieldcontainer');
if (!parentDom) {
parentDom = theField.bodyEl.findParent('.x-field');
}
if (parentDom) {
var parentEl = Ext.get(parentDom);
parentEl.addCls('focused-field');
}
}, item);
item.on('blur', function(theField) {
var parentDom = null; //theField.bodyEl.findParent('.x-form-fieldcontainer');
if (!parentDom) {
parentDom = theField.bodyEl.findParent('.x-field');
}
if (parentDom) {
var parentEl = Ext.get(parentDom);
parentEl.removeCls('focused-field');
}
}, item);
}
});
我不确定如何在 ExtJS 6 中做到这一点
感谢任何帮助
此致
阿曼多
你不需要它,ExtJs 已经将 '.x-field-focus' css class 添加到焦点上的包装元素,因此你可以尝试添加你的样式到现有 class。您还可以查看 $form-field-focus-* 主题变量..
无论如何,如果你想添加这个功能,你可以覆盖'Ext.form.field.Base' class,它是所有表单字段的父级。
像这样:
Ext.define('overrides.form.field.Base', {
override: 'Ext.form.field.Base',
customCssOnFocus: 'focused-field',
initEvents: function() {
this.callParent(arguments);
this.on('focus', this.addCustomCssOnFocus, this);
this.on('blur', this.removeCustomCssOnBlur, this);
},
addCustomCssOnFocus: function() {
Ext.get(this.getEl().findParent('.x-field')).addCls(this.customCssOnFocus);
},
removeCustomCssOnBlur: function() {
Ext.get(this.getEl().findParent('.x-field')).removeCls(this.customCssOnFocus);
}
});
我想在字段聚焦时用自定义 css class 标记每个字段包装容器,并在字段模糊时删除 class。所以我想将 focus/blur 事件方法附加到我添加到任何表单的每个表单字段组件。
在 Ext 4 中我是这样做的:
Ext.ComponentManager.all.on('add', function(map, key, item) {
// Check if item is a Window and do whatever
if (item instanceof Ext.form.field.Base) {
item.on('focus', function(theField) {
var parentDom = null; //theField.bodyEl.findParent('.x-form-fieldcontainer');
if (!parentDom) {
parentDom = theField.bodyEl.findParent('.x-field');
}
if (parentDom) {
var parentEl = Ext.get(parentDom);
parentEl.addCls('focused-field');
}
}, item);
item.on('blur', function(theField) {
var parentDom = null; //theField.bodyEl.findParent('.x-form-fieldcontainer');
if (!parentDom) {
parentDom = theField.bodyEl.findParent('.x-field');
}
if (parentDom) {
var parentEl = Ext.get(parentDom);
parentEl.removeCls('focused-field');
}
}, item);
}
});
我不确定如何在 ExtJS 6 中做到这一点
感谢任何帮助
此致
阿曼多
你不需要它,ExtJs 已经将 '.x-field-focus' css class 添加到焦点上的包装元素,因此你可以尝试添加你的样式到现有 class。您还可以查看 $form-field-focus-* 主题变量..
无论如何,如果你想添加这个功能,你可以覆盖'Ext.form.field.Base' class,它是所有表单字段的父级。 像这样:
Ext.define('overrides.form.field.Base', {
override: 'Ext.form.field.Base',
customCssOnFocus: 'focused-field',
initEvents: function() {
this.callParent(arguments);
this.on('focus', this.addCustomCssOnFocus, this);
this.on('blur', this.removeCustomCssOnBlur, this);
},
addCustomCssOnFocus: function() {
Ext.get(this.getEl().findParent('.x-field')).addCls(this.customCssOnFocus);
},
removeCustomCssOnBlur: function() {
Ext.get(this.getEl().findParent('.x-field')).removeCls(this.customCssOnFocus);
}
});