我有3个组合框。当您单击第一个框时,第二个框需要更新以显示相关数据。我选择第一个组合,第二个框完美更新。但是,如果我再次尝试相同的步骤,则第二个框不会停止加载(参见图像)
以下是我视图中的代码
{
xtype: 'combobox',
name: 'Clients',
id: 'clients',
displayField: 'Name',
store: 'Clients',
queryMode: 'local',
mode: 'local',
valueField: 'Id',
fieldLabel: 'Clients'
},{
xtype: 'combobox',
name: 'Projects',
id: 'projects',
displayField: 'Name',
editable: false,
store: 'Projects',
queryMode: 'local',
mode: 'local',
valueField: 'Id',
fieldLabel: 'Projects'
}
来自我的控制器
stores: ['Projects', 'Clients', 'Jobs'],
init: function () {
this.control({
'#clients': {
change: this.onClientSelect
},
'processlist button[action=copy]': {
click: this.onCopyPart
},
'#processColourContainer #processColourGrid': {
edit: this.onPurchaseOrderColourUpdate
}
});
},
onLaunch: function () {
var clients = this.getClientsStore();
clients.load();
},
onClientSelect: function (selModel, selection) {
var projects = this.getProjectsStore();
projects.load({
url: '/Projects/Read/?clientId=' + selection,
scope: this
});
},
答案 0 :(得分:10)
已知错误:
http://www.sencha.com/forum/showthread.php?153490-Combo-Box-Store-Loading
添加它应该排除它:
store.on('load', function (store, records, successful, options) {
if (successful && Ext.typeOf(combo.getPicker().loadMask) !== "boolean") {
combo.getPicker().loadMask.hide();
}
});
答案 1 :(得分:4)
我与ExtJS Combobox的本地数据存储有相同的症状,但正确的解决方法是在组合框中正确设置queryMode - 商店中没有错误(至少在4.1版本的ExtJS中)。如果您的数据本地存储在数据存储中,则queryMode必须设置为“local”而不是其默认的“remote”值(如下面的工作示例所示)。
组合框:
xtype: 'combobox',
name: 'sizeMaxUnits',
value: 'TB',
editable: false,
displayField: 'abbr',
**queryMode: 'local',**
store: 'UnitsStore',
valueField: 'units'
商店:
Ext.define('DiskApp.store.UnitsStore', {
extend: 'Ext.data.Store',
requires: [
'DiskApp.model.UnitsModel'
],
constructor: function(cfg) {
var me = this;
cfg = cfg || {};
me.callParent([Ext.apply({
autoLoad: false,
model: 'DiskApp.model.UnitsModel',
storeId: 'MyStore',
data: [
{
abbr: 'MB',
units: 'M'
},
{
abbr: 'GB',
units: 'G'
},
{
abbr: 'TB',
units: 'T'
}
]
}, cfg)]);
}
});
答案 2 :(得分:3)
我发现连接到组合上的'expand'事件工作得更好(挂钩到商店的'load'以某种方式破坏了组合对商店的绑定,导致各种可怕的,难以追踪的错误)
combo.on('expand', function (field, options) {
if (Ext.typeOf(field.getPicker().loadMask) !== "boolean") {
field.getPicker().loadMask.hide();
}
}, this);
这对我来说没有破坏我的申请。
答案 3 :(得分:2)
一个非常简单的解决方案是将listConfig
配置添加到您的组合框中:
{
xtype:'combobox',
fieldLabel: 'My Combo',
listConfig: { loadingText: null, loadMask: false },
}