extjs组合不会停止加载4.07

时间:2012-02-22 11:25:56

标签: extjs extjs4 extjs-mvc

我有3个组合框。当您单击第一个框时,第二个框需要更新以显示相关数据。我选择第一个组合,第二个框完美更新。但是,如果我再次尝试相同的步骤,则第二个框不会停止加载(参见图像)

enter image description here

以下是我视图中的代码

{
    xtype: 'combobox',
    name: 'Clients',
    id: 'clients',
    displayField: 'Name',
    store: 'Clients',
    queryMode: 'local',
    mode: 'local',
    valueField: 'Id',
    fieldLabel: 'Clients'
},{
    xtype: 'combobox',
    name: 'Projects',
    id: 'projects',
    displayField: 'Name',
    editable: false, 
    store: 'Projects',
    queryMode: 'local',
    mode: 'local',
    valueField: 'Id',
    fieldLabel: 'Projects'
}

来自我的控制器

stores: ['Projects', 'Clients', 'Jobs'],

init: function () {
    this.control({
        '#clients': {
            change: this.onClientSelect
        },
        'processlist button[action=copy]': {
            click: this.onCopyPart
        },
        '#processColourContainer #processColourGrid': {
            edit: this.onPurchaseOrderColourUpdate
        }
    });
},

onLaunch: function () {             
    var clients = this.getClientsStore();
    clients.load();             
},
onClientSelect: function (selModel, selection) {

    var projects = this.getProjectsStore();
    projects.load({
        url: '/Projects/Read/?clientId=' + selection,
        scope: this
    });    
},

4 个答案:

答案 0 :(得分:10)

已知错误:

http://www.sencha.com/forum/showthread.php?153490-Combo-Box-Store-Loading

添加它应该排除它:

store.on('load', function (store, records, successful, options) {
    if (successful && Ext.typeOf(combo.getPicker().loadMask) !== "boolean") {
        combo.getPicker().loadMask.hide();
    }
});

答案 1 :(得分:4)

我与ExtJS Combobox的本地数据存储有相同的症状,但正确的解决方法是在组合框中正确设置queryMode - 商店中没有错误(至少在4.1版本的ExtJS中)。如果您的数据本地存储在数据存储中,则queryMode必须设置为“local”而不是其默认的“remote”值(如下面的工作示例所示)。

组合框:

xtype: 'combobox',
name: 'sizeMaxUnits',
value: 'TB',
editable: false,
displayField: 'abbr',
**queryMode: 'local',**
store: 'UnitsStore',
valueField: 'units'

商店:

Ext.define('DiskApp.store.UnitsStore', {
extend: 'Ext.data.Store',

requires: [
    'DiskApp.model.UnitsModel'
],

constructor: function(cfg) {
    var me = this;
    cfg = cfg || {};
    me.callParent([Ext.apply({
        autoLoad: false,
        model: 'DiskApp.model.UnitsModel',
        storeId: 'MyStore',
        data: [
            {
                abbr: 'MB',
                units: 'M'
            },
            {
                abbr: 'GB',
                units: 'G'
            },
            {
                abbr: 'TB',
                units: 'T'
            }
        ]
    }, cfg)]);
}

});

答案 2 :(得分:3)

我发现连接到组合上的'expand'事件工作得更好(挂钩到商店的'load'以某种方式破坏了组合对商店的绑定,导致各种可怕的,难以追踪的错误)

combo.on('expand', function (field, options) {
    if (Ext.typeOf(field.getPicker().loadMask) !== "boolean") {
        field.getPicker().loadMask.hide();
    }
}, this);

这对我来说没有破坏我的申请。

答案 3 :(得分:2)

一个非常简单的解决方案是将listConfig配置添加到您的组合框中:

{
    xtype:'combobox',
    fieldLabel: 'My Combo',
    listConfig: { loadingText: null, loadMask: false },
}