我在 ExtJS 4.2.1 中遇到了同样的问题。我通过调用reload()
数据存储,然后在数据存储回调setValue()
中的项目选择器上使用一个空字符串来使其工作。reload()
Ext.create("Ext.form.field.ComboBox", {
// Other properties removed for brevity
listeners: {
change: function(field, newValue, oldValue, eOpts) {
Ext.getStore("ExampleStore").reload({
callback: function() {
Ext.getCmp("ExampleItemSelector").setValue("");
}
});
}
}
});
Ext.create("Ext.data.Store", {
storeId: "ExampleStore",
// Other properties removed for brevity
});
Ext.create("Ext.form.FormPanel", {
// Other properties removed for brevity
items:[{
xtype: "itemselector",
id: "ExampleItemSelector",
// Other properties removed for brevity
}]
});
对于任何好奇的人,我相当确信项目选择器的populateFromStore()
功能中存在错误。调用该函数时,它会盲目地将绑定存储 ( store
) 中的所有值添加到内部存储 ( fromStore
)。我怀疑应该在调用 tofromStore.removeAll()
之前调用 to fromStore.add()
。这是来自 ItemSelector.js 的相关代码。
populateFromStore: function(store) {
var fromStore = this.fromField.store;
// Flag set when the fromStore has been loaded
this.fromStorePopulated = true;
fromStore.add(store.getRange());
// setValue waits for the from Store to be loaded
fromStore.fireEvent('load', fromStore);
},
编辑 2013 年 12 月 18 日
如果您在项目选择器上配置了任何回调事件(例如change
),您可能希望在调用 时暂时禁用这些事件setValue("")
。例如:
var selector = Ext.getCmp("ExampleItemSelector");
selector.suspendEvents();
selector.setValue("");
selector.resumeEvents();