3

extjs アプリケーションでコンボボックス コンポーネントを使用しています。json を介してリストをロードしたいと思います。しかし、コンボボックスをクリックすると、リストが表示されません。これで私を助けてください。

以下は ajax 呼び出しです。

Ext.Ajax.request({
                            url: 'data/vgroup.json',
                            method: 'Get',
                            timeout: 9000,
                            success: function(response, opts) {
                                var device = Ext.decode(response.responseText);
                                var device_records = new Array();

                                for(var itr=0; itr < device.vgroup.length; itr++) {
                                    var record = new Array();
                                    record[0] = device.vgroup[itr].name;
                                    //alert(device.vgroup[itr].name);
                                    device_records[itr] = record;
                                }

                                vgfrmextension_device = new Ext.data.ArrayStore({
                                    fields: ['name'],
                                    data : device_records
                                });
                            },
                            failure: function(response, opts) {
                                Ext.MessageBox.alert('Failure', "Link not found");
                            }
                        });

以下がコンポーネントです。

{
            xtype:'combobox',
            fieldLabel: 'Team name* ',
            editable:false,
            /*allowBlank: false,*/
            store: vgfrmextension_device,
            valueField:'name',
            displayField:'name',
            name: 'txtMode',
            id:'txtModeId',
            queryMode: 'local',
            triggerAction: 'all',
            emptyText:'Select Mode',    
            listeners: {

            }
        },

ここにjsonがあります:

{
    vgroup: [
        {
            'id': 'team1',
            'name': '100G',
            'size': '5646546546',
            'available': '545644541',
            'player': 'avi',
            'status': 'Good'
        },
4

3 に答える 3

1

ロードはストアを通じて行う必要があります。私の古いアプリの例を次に示します。

FC.Global.Toolbar = [{
    xtype: 'combo',
    store: new Ext.data.JsonStore({
        proxy: new Ext.data.HttpProxy(new Ext.data.Connection({
            url: 'comboboxlist.php'
        })),
        root: 'items',
        fields: ['name']
    }),
    displayField: 'name',
    valueField: 'name',
    mode: 'local',
    triggerAction: 'all',
    typeAhead: true,
    minChars: 1,
    id: 'widgetloadcombobox',
    listeners: {render: function(e) {this.getStore().load();}}
},{
    // Other toolbar items
}]

そして、HttpProxy 呼び出しによって返される JSON は次のようになります (項目が 1 つだけの場合)。

{"items":[{"name":"Generator"}]}
于 2012-07-23T14:41:34.033 に答える
0

最初に device_records 配列を確認する必要があるかもしれません。

Ext.Ajax.request({
                            url: 'data/vgroup.json',
                            method: 'Get',
                            timeout: 9000,
                            success: function(response, opts) {
                                var device = Ext.decode(response.responseText);
                                var device_records = [
                                         {"name":"John"},
                                         {"name":"Anna"},
                                         {"name":"Peter"}
                               ];
                                vgfrmextension_device = new Ext.data.ArrayStore({
                                    fields: ['name'],
                                    data : device_records
                                });
                            },
                            failure: function(response, opts) {
                                Ext.MessageBox.alert('Failure', "Link not found");
                            }
                        });

これが機能する場合は、次のように充填戦略を変更できます。

Ext.Ajax.request({
                            url: 'data/vgroup.json',
                            method: 'Get',
                            timeout: 9000,
                            success: function(response, opts) {
                                var device = Ext.decode(response.responseText);
                                var device_records = [];

                                for(var itr=0; itr < device.vgroup.length; itr++) {
                                    device_records.push(
                                              {
                                               "name": device.vgroup[itr].name
                                            });
                                }

                                vgfrmextension_device = new Ext.data.ArrayStore({
                                    fields: ['name'],
                                    data : device_records
                                });
                            },
                            failure: function(response, opts) {
                                Ext.MessageBox.alert('Failure', "Link not found");
                            }
                        });

よろしく。

于 2016-06-17T07:21:45.983 に答える