ExtJS 作为一款功能完备的前端 UI 框架,此前我并未正式上手使用过,但知道它与 EasyUI、BUI、DWZ 等属于同类框架,只是 ExtJS 能力更强、体系更庞大。今天之所以专门记录这个细节,是因为它非常实用——说不定哪天你也会遇到完全相同的坑。
事情的起因是这样:一位朋友在 ExtJS 中开发下拉列表,希望实现类似原生 HTML 里“只选不输”的效果——即下拉框只能通过点击选择,不能手动在输入框里打字。然而 ExtJS 这类框架的下拉框默认允许输入,于是他本能地想到用 editable 属性,觉得只要设成 false 就能搞定。结果一写就报错,当时没仔细看错误信息。我帮他试了另一个据说可设置不可编辑的属性,依然无效。后来重新仔细阅读报错提示,又翻了一遍 API 文档,才彻底解决问题。
报错的核心意思是:如果 typeAhead 已启用,那么下拉列表的 editable 属性必须同时为 true。但 typeAhead 默认是 false,从报错看应该是代码里某处将它设成了 true,导致 editable 设为 false 时触发了冲突。
解决方案其实非常直接:将两个属性都显式设置为 false。
即:
typeAhead: false,
editable: false
希望这个小经验能帮到同样被此问题困扰的开发者朋友们。
