代码之家  ›  专栏  ›  技术社区  ›  maryyyyyyy

extjs 6 ComboBox_查询模式:“本地”_数据未显示

  •  2
  • maryyyyyyy  · 技术社区  · 8 年前

    所以我有一个组合框,它是为某个视图动态加载的。 每当我将querymode设置为remote时,如果单击组合框,它将加载数据,但是如果设置为local,它将不会显示任何数据。 我的存储会正确地返回请求的数据,只是它不会显示在组合框中。

    我是不是错过了什么? 希望有人能帮助我。

    这是带有组合框的视图的控制器:

    Ext.define('Stm.controller.HpUpdate', {
        extend: 'Ext.app.Controller',
    
        requires: [
            'Stm.view.contents.hpupd.Detail'
        ],
    
        stores: [
            'SiteDomain'
        ],
    
        fromDetail: false,
        isAbort: false,
        isDataSeted: false,
        firstSorters: undefined,
        recordId: undefined,
        isUpdate: false,
    
        init: function() {
            this.callParent(arguments);
            console.log(Ext.getDisplayName(arguments.callee));
    
            this.control({
                'hup-list': {
                    afterRender: this.setupStmList
                }
            });
    
            this.addRef([{
                    ref: 'list',
                    selector: 'hup-list'
                },
                {
                    ref: 'detail',
                    selector: 'hup-detail'
                },
            ]);
        },
    
        setupStmList: function() {
            console.log(Ext.getDisplayName(arguments.callee));
    
            var me = this;
            var store = me.getSiteDomainStore();
            var record = Cps.Util.baseRecord();
    
            store.load({
                params: param,
                callback: function(records, operation, success) {
                    var response = operation.response;
                    if (!response || response.length === 0) {
                        return;
                    }
    
                    var responseText = response.responseText;
                    if (!responseText || responseText.length === 0) {
                        return;
                    }
                    var res = Ext.decode(responseText);
    
                    if (res.common.st === 'mainte' || res.common.st === 'abort') {
                        return;
                    }
    
                    if (res.common.st === 'ng') {
                        Cps.Util.alert(res.common.msg);
                        return;
                    }
                    if (records.length === 0) {
                        return;
                    }
    
                    me.getList().down('#dtAplDateTimeFrom').down('#dateField').focus();
                }
            });
    
            me.firstSorters = this.getHpUpdateStore().getSorters();
        },
    });
    

    这是我的观点:

     Ext.define('Stm.view.contents.hpupd.List', {
         extend: 'Ext.container.Container',
         alias: 'widget.hup-list',
         layout: {
             type: 'vbox',
             align: 'stretch'
         },
    
         items: [{
             xtype: 'cps-combobox',
             fieldLabel: 'Domain',
             itemId: 'cmbSiteDomain',
             queryMode: 'local',
             store: {
                 type: 'sitedomain'
             },
             width: 350,
             displayField: 'siteDomain',
             valueField: 'siteId',
         }],
     });
    

    商店:

    Ext.define('Stm.store.SiteDomain', {
    extend: 'Extends.data.Store',
    alias: 'store.sitedomain',
    requires: [
        'Cps.Setting',
        'Stm.model.SiteInfo'
    ],
    
    model: 'Stm.model.SiteInfo',
    
    pageSize: Stm.Const.controller.dataCountLimit,
    proxy: {
        type: 'ajax',
        url: Cps.Setting.getEntryUrl() + '/stm/st-update/site-domain',
        reader: {
            type: 'json',
            rootProperty: 'data'
        },
        actionMethods: {
            create: 'POST',
            read: 'POST',
            update: 'POST',
            destroy: 'POST'
        }
    }
    });
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   Hesam Faridmehr    8 年前

    当你准备好 queryMode local 这意味着不会从远程源加载数据,并且数据应通过例如 Ext.data.ArrayStore

    {
        xtype: 'combobox'
        queryMode: 'local',    
        valueField: 'id',
        displayField: 'name',
        store: new Ext.data.ArrayStore({
            fields: ['id', 'name'],
            data: [[1, 'item1'], [2, 'item2']] 
        })
    }
    

    如果只希望从远程源加载一次数据,并在本地组合查询数据,则应手动添加存储项。

    定义您的 combo 像:

    {
        xtype: 'combobox'
        itemId: 'myCombo'
        queryMode: 'local',    
        valueField: 'id',
        displayField: 'name',
        store: new Ext.data.ArrayStore({
            fields: ['id', 'name'],
            data: [] 
        })
    }
    

    然后将项目添加到 联合体 像:

    Ext.Ajax.request({
        url : 'Remote_Source',
        success: function(response, opts) {
             var json = Ext.decode(response.responseText),
                 store = me.down("#myCombo").getStore();
    
             Ext.each(json.items, function(item){
                store.add(item);
             });
         }
    });
    

    注意:这是您应该添加实现的示例代码

    推荐文章