ExtJSのCompboxの割当問題


Extjsのbugを探して墓を掘るのと似ています!特に毎回バージョンが更新された後は…
Extjsは商業化されてから、GPLバージョンのダウンロードアドレスはますます探しにくくなりました.ここではまだ訪問できる住所を教えてください.https://www.sencha.com/legal/gpl/
無料のExtjsをダウンロードすれば、リンクが失効したら、みんなに一つの方法を教えます.https://www.sencha.com 公式サイトの右上の検索欄でgplを検索したら見つけられます.
Extjsを使って長くなりました.たくさんのものを見てAPIを調べなければなりません.後に考えてみると、Compboxの赋価さえ覚えられなくなりました.これは一番簡単な賦課方法です.
 var cb1 = Ext.create('Ext.form.field.ComboBox', {
                renderTo: Ext.getBody(),
                fieldLabel: '    1'
            });
            cb1.setValue("a");
または以下のようなデフォルトの割り当て方法
var cb2 = Ext.create('Ext.form.field.ComboBox', {
                renderTo: Ext.getBody(),
                fieldLabel: '    2',
                value: "b"
            });
Storeの割当方式ですが、このような割当方式はvalueFieldとdisplayFieldの二つのフィールドが必要です.
var store4 = Ext.create('Ext.data.Store', {
                data: datas
            });
            var cb4 = Ext.create('Ext.form.field.ComboBox', {
                renderTo: Ext.getBody(),
                fieldLabel: '    4',
                valueField: 'id',
                displayField: 'name',
                store: store4,
                value: datas[0]['id']
            });
ここでは、標準的な割当値value属性を使用していますが、このvalueはvalue Fieldの値でなければならないか、または以下のAPI方式を使用して値を割り当てます.
cb4.setValue(datas[0]['id']);
このデフォルトの割当方法は同じでなければなりません.valueFieldの値も必要です.
以上の割当値は、再既知のdataの場合、dataが動的に更新され、かつ不確定である場合、例えば、queryMode:"remote"の方式で動的に調べられている場合、このような状況は複雑であり、方式の多くの原理は、store.load()の後にstore.add(data)がデフォルト値をstore中に設定してからcompbobox.setValue(data)を設定すればいいです.一般的にロードイベントでやることができますが、実際に使うともっと難しい問題があります.
//   data        ,defaultPostId               
setUserStore: function (data, defaultPostId) {
        var copanel = this,
            d = data;
        var info = JController.APIUser.getSearchMembers().info();
        var store = Ext.create('Ext.data.Store', {
            fields: ['id', 'name', 'nick', 'showName'],
            proxy: {
                type: 'ajax',
                url: info.url,
                extraParams: info.param
            },
            listeners: {
                //     store.add 、 combobox.setValue 、 store.load    
                datachanged: function (me, o) {
                    var count = me.count();

                    //           store    
                    if (data) {
                        data = null;
                        me.add(d);
                        return;
                    }
                    //     store          data    
                    if (d) {
                        copanel.find('userId').setValue(d['id']);
                        d = null;
                        return;
                    }
                    //    return             

                    for (var i = 0; i < count; i++) {
                        var record = me.getAt(i);
                        record.set('showName', record.get('name') + ' ( ' + record.get('nick') + ' ) ')
                    }

                    copanel.initPostRadioGroup(defaultPostId);
                }
            }
        });
        store.load();
        this.find('userId').bindStore(store);
    },
もちろんここは私の解決方法です.ご参考ください.