我想在组合框发生变化时更新组合框存储并显示此更改的存储。我的商店正在加载,但组合框不会显示它。我可以显示本地商店,就像我想要显示但不能对远程json商店做同样的事情。
我有一个像这样的“ProcessController”:
onComboboxChange: function(combo, newValue, oldValue) {
var upContainer = combo.up('container');
if(combo.itemId == "cmbServiceList") {
MyApp.app.globals.cmbServiceStore = this.createServiceCmbStore(upContainer.getComponent('cmbServiceList').getRawValue());
}
},
createServiceCmbStore: function(inputData){
var data = {"inputData": inputData};
var mainController = MyApp.app.getController('MainController');
var cmbServiceData = mainController.callService(data,'getServices','json');
var classServices = Ext.JSON.decode(cmbServiceData);
var projectStore = Ext.create('Ext.data.Store', {
fields: ['key', 'text'],
data: classServices
});
return projectStore;
}
init: function(application) {
this.control({
'combobox': {
change: this.onComboboxChange
}
});
_myAppGlobal = this;
},
这是我在主视口中的组合框:
{
xtype : 'combobox',
anchor : '80%',
listConfig : {
loadingText : 'Searching...',
emptyText : 'No matching posts found.'
},
typeAhead : true,
itemId : 'cmbServiceList',
fieldLabel : 'Servis Adı:',
hideTrigger : true,
displayField : 'text',
store : MyApp.app.globals.cmbServiceStore,
valueField : 'key',
minChars : 1,
queryMode : 'local',
forceSelection: true
}
MyApp.app.globals.cmbServiceStore
是app.js
当我调试代码时,我可以看到存储已加载,但它不会在组合框中显示任何存储的值。
答案 0 :(得分:0)
问题主要在于,当你的组合框被创建时,MyApp.app.globals.cmbServiceStore为null或未定义,一旦组合框被初始化然后你尝试定义你的商店,它就不会作为给定的参考组合在初始化到组合框期间未定义。
根据您的代码,您似乎只是更改商店的数据而不是商店字段。因此,在组合框初始化之前创建商店要好得多,然后在combox更改时,只需使用store.add将数据添加到商店
我建议采用另一种方法,即为您的商店添加代理服务,然后对组合更改执行store.load()
答案 1 :(得分:0)
if(combo.itemId == "cmbServiceList") {
MyApp.app.globals.cmbServiceStore = this.createServiceCmbStore(upContainer.getComponent('cmbServiceList').getRawValue());
upContainer.getComponent('cmbServiceList').bindStore(MyApp.app.globals.cmbServiceStore);
}
而不是
if(combo.itemId == "cmbServiceList") {
MyApp.app.globals.cmbServiceStore = this.createServiceCmbStore(upContainer.getComponent('cmbServiceList').getRawValue());
}
解决了这个问题。