我想出了另一種解決方案,看起來更加簡單和快速的測試顯示無副作用:
我們可以把組合框的邏輯不變,而只是通過CSS隱藏選定項目:
.x-boundlist-selected {
display: none;
}
而且瞧,我們沒有看到選定的項目!不知道怎麼可靠,這將是在生產代碼,但還是值得考慮的,我想......
更新。下面是完整的解決方案,如果你想控制通過組合框的配置將此行爲:
Ext.define('My.ComboBox', {
extend: 'Ext.form.field.ComboBox',
/**
* @cfg {Boolean} hideActive=true
* When true, hides the currently selected value from the dropdown list
*/
hideActive: true,
/**
* Internal method that creates the BoundList
*/
createPicker: function() {
var picker = this.callParent(arguments);
// honor the hideActive flag
if(this.hideActive) {
picker.addCls('x-boundlist-hideactive');
}
return picker;
}
});
某處在你的CSS:
.x-boundlist-hideactive .x-boundlist-selected {
display: none;
}
UPDATE 2.發現一個UI問題我的方法!
從下拉列表中隱藏選定的項目引入了鍵盤導航的怪癖:儘管該元素在視覺上隱藏,但它仍然存在,並且按下UP/DOWN鍵時Ext將選擇它。在視覺上,這意味着你的選擇會在某個時候消失,你將不得不再次按下UP/DOWN來重新顯示下一個可見元素。
到目前爲止,我無法找到一個簡單的解決方案。 我最好的辦法是修改綁定列表(這是一個數據視圖)的itemSelector
,將其設置爲.x-boundlist-item:not(.x-boundlist-selected)
之類的東西,以便所選元素不會將其添加到查詢中。
而選擇自己的工作,因爲視圖執行之前的任何其他類此選擇查詢(包括所選項目類),它並沒有解決這個問題得到應用到項目(這發生在Ext.view.AbstractView.refresh()。
此外,該解決方案將導致下拉列表錯位,當它出現在組合框上面!
我有一種感覺,我的做法是太容易工作得很好:)
在Sencha的論壇上提出同樣的問題:http://www.sencha.com/forum/showthread.php?241063-Combobox-hide-selected-value-from-dropdown-list&p=882210 –