0

'displayField'および'valueField'構成とともにストアをリセットする必要があるフォームにコンボボックスがあります。

経由でストアをリセットするとcmb.bindStore(newStore)うまくいきます。

設定cmb.displayField = 'newfieldname';もうまくいきます。

ただし、cmb.valueField = 'newValField';動作しません。コンボは正しいものを表示しますが、アイテムを選択すると、値は新しい値ではなく、古いvalueField値を使用しています。

私はもう試した:

  • cmb.reset()後でやって
  • Ext.apply(...)

必須フィールドだからvalueFieldなんとなく特別だからなのか?知らないExt-JSコンポーネントに設定値を設定する特別な方法はありますか、それとも「valueField」の値を変更することはできませんか?

参考までに-これが私のコードです:

    comp.bindStore(Ext.create('Ext.data.Store', {
        fields : [ {
            name : 'abbr',
            type : 'string'
        }, {
            name : 'name',
            type : 'string'
        }, {
            name : 'slogan',
            type : 'string'
        } ],
        data : [ {
            "abbr" : "AL",
            "name" : "Alabama",
            "slogan" : "The Heart of Dixie"
        }, {
            "abbr" : "AK",
            "name" : "Alaska",
            "slogan" : "The Land of the Midnight Sun"
        }, {
            "abbr" : "AZ",
            "name" : "Arizona",
            "slogan" : "The Grand Canyon State"
        }, {
            "abbr" : "AR",
            "name" : "Arkansas",
            "slogan" : "The Natural State"
        }, ]
    }));

    comp.displayField = 'abbr';    // THIS WORKS
    comp.valueField = 'abbr';      // THIS DOESNT WORK
4

2 に答える 2

1

この方法でコンボ ボックスを再構成できるかどうかはわかりませんが、ストアと valueField が異なる別のコンボ ボックスを作成できる可能性があります。ロジックに基づいて、どちらか一方を非表示/破棄します。

于 2013-01-30T00:47:53.043 に答える
1

あなたはもうすぐそこにいますが、間違ったプロパティの原因を見ているのvalueFieldはあなたの問題ではありませんdisplayField. あなたの正確な問題は、事前に構成され、キャッシュされたプロパティです。1 つ目は表示テンプレート、2 つ目はピッカー インスタンスです。テンプレートをオーバーライドし、ピッカー インスタンスを削除する必要があります。これが作業中の抜粋です(JSFiddle

この例では、クロスで 2 番目のトリガーを追加しました。ヒットすると、ComboBox が新しい値を取得します。ComboBox から拡張して独自のコンポーネントを作成し、すべてをツリー パラメーターを期待する reconfigure メソッドにラップすることをお勧めします。

Ext.onReady(function() {
    // The data store containing the list of states
    var states = Ext.create('Ext.data.Store', {
        fields: ['abbr', 'name'],
        data : [
            {"abbr":"AL1", "name":"Alabama1"},
            {"abbr":"AK1", "name":"Alaska1"},
            {"abbr":"AZ1", "name":"Arizona1"}
            //...
        ]
    });

    var comp = Ext.create('Ext.form.field.ComboBox', {
        fieldLabel: 'Choose State',
        id: 'combo-ident',
        trigger2Cls: 'x-form-clear-trigger',
        onTrigger2Click: function (args) {
            var comp = Ext.getCmp('combo-ident');
            comp.clearValue();
            comp.bindStore(Ext.create('Ext.data.Store', {
                fields : [ {
                    name : 'abbr',
                    type : 'string'
                }, {
                    name : 'name',
                    type : 'string'
                }, {
                    name : 'slogan',
                    type : 'string'
                } ],
                data : [ {
                    "abbr" : "AL",
                    "name" : "Alabama",
                    "slogan" : "The Heart of Dixie"
                }, {
                    "abbr" : "AK",
                    "name" : "Alaska",
                    "slogan" : "The Land of the Midnight Sun"
                }, {
                    "abbr" : "AZ",
                    "name" : "Arizona",
                    "slogan" : "The Grand Canyon State"
                }, {
                    "abbr" : "AR",
                    "name" : "Arkansas",
                    "slogan" : "The Natural State"
                }, ]
            }));

            comp.displayField = 'abbr';
            comp.valueField = 'name';
            comp.displayTpl = new Ext.XTemplate(
                '<tpl for=".">' +
                    '{[typeof values === "string" ? values : values["' + comp.displayField + '"]]}' +
                    '<tpl if="xindex < xcount">' + comp.delimiter + '</tpl>' +
                '</tpl>'
            );
            comp.picker = null;
        },
        store: states,
        queryMode: 'local',
        displayField: 'name',
        valueField: 'abbr',
        renderTo: Ext.getBody()
    });
    comp.on('select', function(){ console.log(arguments); console.log(arguments[0].getSubmitValue()); })

});
于 2013-01-30T07:55:52.197 に答える