コンボ ボックス項目に項目を動的に追加したい。これはその定義方法です:
{
xtype: 'combobox',
id: 'tierTypeCB',
fieldLabel: 'Tiers\' type',
labelWidth: 70,
editable: false,
valueField: 'type',
displayField: 'type',
store: Ext.create('Ext.data.Store',{
fields: ['type'],
data: []
})
}
コードの他の部分には、アイテムを追加することになっている次の関数があります。
onGetTiersSuccess: function(response) { // this is a 'success' function of an AJAX request
var decodedResponse = Ext.decode(response.responseText);
var tierTypeCB = Ext.getCmp('tierTypeCB');
var tierTypesStore = tierTypeCB.getStore();
for (var tierType in decodedResponse){
tierTypesStore .add({type: tierType});
}
}
問題は、ドロップダウンを開くと空になることです。私が見つけたのは、私のコードがデータをコンボボックスのストアに入れることですが、コンボが展開されるとストアが空になります。Chrome のコンソールを使用してさらにテストを行いました。「onGetTiersSuccess」関数をコメントアウトしました。代わりに、コンソールに入力するだけでExt.getCmp('tierTypeCB').getStore().add({type: 'abc'})
、コンボボックスを開くと空になります。ただし、最初にコンボボックスを開いて(そのアイテムを追加する前に)、アイテムを追加すると、コンボボックスを再度開くと、追加したアイテムが表示されます。コンボボックスを開く前にアイテムを追加すると、コンボボックスが開かれると、コンボボックスのストアが「リセット」されるようです。Ext.getCmp('tierTypeCB').expand()
呼び出してから呼び出すことでバイパスしようとしましたExt.getCmp('tierTypeCB').collapse()
アイテムを追加する前ですが、それは役に立ちませんでした。私はまた、コンボボックスのストアを定義する場所に設定しないようにしましたが、ストアオブジェクトを作成してから(bindStore()
コマンドを使用して)コンボボックスにバインドしましたが、どちらも役に立ちませんでした。
現時点では無知なので、何か参考になれば幸いです。
ありがとう、eRez