在ExtJS中,确定ComboBox当前选定项的索引的标准方法是什么?
在ExtJS 3.x和4之间,如何执行此操作是否有区别?
var combo = new Ext.form.ComboBox(config);
var selectedIndex = combo.selectedIndex; // TODO: Implement
if(selectedIndex > 2) {
// Do something
}
如何将其作为属性添加到ComboBox对象中,加分项。
在ExtJS中,确定ComboBox当前选定项的索引的标准方法是什么?
在ExtJS 3.x和4之间,如何执行此操作是否有区别?
var combo = new Ext.form.ComboBox(config);
var selectedIndex = combo.selectedIndex; // TODO: Implement
if(selectedIndex > 2) {
// Do something
}
如何将其作为属性添加到ComboBox对象中,加分项。
我认为你需要使用组合框(combo)的store。组合框有一个私有的findRecord
方法,可以根据属性和值在存储器中进行简单的搜索。你可以在源代码中查看示例(Combo.js第1119行)。
1)基于此,你可以通过以下方式找到所选索引:
var v = combobox.getValue();
var record = combobox.findRecord(combobox.valueField || combobox.displayField, v);
var index = combobox.store.indexOf(record);
2) 或者你可以绑定"select"事件,该事件会在组合框被选中时触发,并将选中的记录及其索引作为参数传递。
3) 你也可以访问视图的getSelectedIndexes()方法,但我怀疑这不是一个好的解决方案(因为我不确定它是否始终可用)
最后,如果你想扩展combobox对象,我认为这应该可以工作(如果你选择第一种解决方案):
Ext.override(Ext.form.ComboBox({
getSelectedIndex: function() {
var v = this.getValue();
var r = this.findRecord(this.valueField || this.displayField, v);
return(this.store.indexOf(r));
}
});
Ext.override(Ext.form.ComboBox, {
getSelectedIndex: function() {
var v = this.getValue();
var r = this.findRecord(this.valueField || this.displayField, v);
return(this.store.indexOf(r));
}
});
如果您的组合框中的valueField与组合框所使用的存储id相同,您可以简单地避免搜索:
var v = combobox.getValue();
var record = combobox.findRecord(combobox.valueField || combobox.displayField, v);
var index = combobox.store.indexOf(record);
var id = combobox.getValue();
var record = store_combobox.getById(id);