0

コンボボックスに変更があるたびにコンボボックスストアを更新し、この変更されたストアを表示したいと考えています。ストアを読み込んでいますが、コンボボックスに表示されません。表示したいようにローカルストアを表示できますが、リモート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

コードをデバッグすると、ストアが読み込まれていることがわかりますが、コンボボックスに保存された値は表示されません。

4

2 に答える 2

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());
}

問題を解決しました。

于 2013-08-22T06:25:43.273 に答える
0

ここでの主な問題は、コンボボックスが作成されたときに MyApp.app.globals.cmbServiceStore が null または未定義であり、コンボボックスが初期化されてからストアを定義しようとすると、初期化中に指定された参照としてコンボボックスが定義されないことです。コンボボックスが定義されていませんでした。

あなたのコードに基づいて、ストアのフィールドではなく、ストアのデータを変更しているようです。したがって、コンボボックスの初期化の前にストアを作成し、コンボボックスの変更時に store.add を使用してストアにデータを追加する方がはるかに優れています

別のアプローチをお勧めします。つまり、サービスのストアにプロキシを追加し、コンボの変更時に store.load() を実行するだけです

于 2013-08-21T17:14:01.680 に答える