3

コンボ ボックス項目に項目を動的に追加したい。これはその定義方法です:

{
      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

4

2 に答える 2

7

lastQueryコンボの構成を使用して、最初に展開したときにストアがリロードしないようにする必要があります。

{
    xtype: 'combobox',
    lastQuery: '',
    id: 'tierTypeCB',
    fieldLabel: 'Tiers\' type',
    labelWidth: 70,
    editable: false,
    valueField: 'type',
    displayField: 'type',
    store: Ext.create('Ext.data.Store',{
        fields: ['type'],
        data: []
    })
}

ここのドキュメントを参照してください: http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.field.ComboBox-property-lastQuery

于 2013-07-31T14:10:06.780 に答える
6

queryModeプロパティを に設定しますlocal。何が起こっているかというと、コンボボックスを展開しようとするまで空のストアが作成されていないということです。queryModeデフォルトのプロパティは ですremote。に設定するとlocal、コンボボックスの作成時にストアが読み込まれるため、問題が修正されます。

于 2013-07-31T14:12:30.390 に答える