ExtJS 6经典模式:含文本框的菜单项iconCls不生效如何解决?
ExtJS 6经典模式:带输入框的菜单项显示图标解决方案
问题原因
textfield是表单组件,并非专门的菜单组件(Ext.menu.Item),它本身没有处理菜单图标的渲染逻辑,所以直接在textfield上设置iconCls不会被ExtJS解析渲染。只有Ext.menu.Item及其子类会自动处理图标样式。
解决方案
方法1:将文本框嵌套在menuItem中(推荐)
把textfield作为Ext.menu.Item的子元素,利用menuItem的图标渲染能力,这样既保留文本框的功能,又能正常显示菜单图标:
items: [{ text : '<b>Add to Favorites</b>', iconCls : 'ico-new', hideOnClick : false, handler : 'onAddToFavorites', bind : { hidden : '{isEditing}' } },{ xtype : 'menuitem', iconCls : 'ico-new', // 此时会正常渲染图标 hidden : true, bind : { hidden : '{!isEditing}' }, items: [{ xtype : 'textfield', selectOnFocus: true, anchor : '100%' }] }];
这种方式完全贴合ExtJS的组件设计,菜单样式和常规项保持一致,无需额外CSS调整。
方法2:自定义CSS为文本框添加图标
如果不想嵌套组件,可以给textfield添加自定义CSS类,手动设置背景图标:
- 定义CSS样式(根据你的图标尺寸调整padding和背景路径):
.textfield-menu-icon { background-image: url('your/icon/path/ico-new.png') !important; background-repeat: no-repeat; background-position: 4px center; padding-left: 24px; /* 图标宽度+留白,确保输入内容不被图标遮挡 */ }
- 修改
textfield配置:
{ xtype : 'textfield', cls : 'textfield-menu-icon', // 应用自定义样式 selectOnFocus: true, anchor : '100%', hidden : true, bind : { hidden : '{!isEditing}' } }
这种方式更灵活,但需要手动调整样式以匹配菜单的默认图标布局。
内容的提问来源于stack exchange,提问作者Mooh
相关产品推荐
相关产品推荐

