-1

我定义了一个窗口,包括一个表单和一些字段和组合框。像这样的例子

    Ext.define('Ext.example.ABC', {
        extend: 'Ext.window.Window',   
        items:{
            xtype:'form',
            items:[
            {
            xtype: 'combo',
            id: 'example',
            name: 'ax',
            triggerAction:  'all',
            forceSelection: true,
            editable:       false,
            allowBlank: false,
            fieldLabel:     'example',
            mode: 'remote',
            displayField:'name',
            valueField: 'id',
            store: Ext.create('Ext.data.Store', {
                            fields: [
                                {name: 'id'},
                                {name: 'name'}
                            ],
                            autoLoad: true,
                            proxy: {
                                type: 'ajax',
                                url: 'example.php',
                                reader: {
                                    type: 'json',
                                    root: 'rows'
                                }
                            }
                }
            })
            }]
         }
         ,load: function(a) {
              // do some thing
         }
});

我在网格面板中有一个按钮

tbar:[
        {    
            text:'create',
            handler:function(){
                         var x = new Ext.example.ABC();
                 x.load(0);

            }
        }

但是为什么当我刚刚启动 gridpanel 然后组合也加载而我没有点击按钮create
我有很多组合框,这使我的网格面板加载缓慢:(
我该如何解决谢谢

4

2 回答 2

2

我猜你需要autoLoad: false为你的组合框设置配置选项store


关于您的评论-我创建了一个示例。您可以在jsFiddle上查看。
它是在 ExtJs 3.4 上创建的,但我认为对于 4.x,它不会有太大不同。

var arrTestData = [
    ['AL', 'Alabama', 'The Heart of Dixie'],
    ['AK', 'Alaska', 'The Land of the Midnight Sun'],
    ['AZ', 'Arizona', 'The Grand Canyon State'],
    ['AR', 'Arkansas', 'The Natural State'],
    ['CA', 'California', 'The Golden State']
];

var combosCount = 5;
var arrItems = [];
for (var i = 0; i < combosCount; i++) {
    var comboId = Ext.id();

    // simple array store
    var store = new Ext.data.ArrayStore({
        parentCombo: comboId,
        fields: ['abbr', 'state', 'nick'],
        data : []
    });

    store.on('load', function() {
        var combo = Ext.getCmp(this.parentCombo);
        combo.setValue(combo.defaultValue);
    });

    var combo = new Ext.form.ComboBox({
        id: comboId,
        fieldLabel: 'Combobox #' + (i + 1),
        store: store,
        displayField:'state',
        valueField:'abbr',
        typeAhead: true,
        mode: 'local',
        forceSelection: true,
        triggerAction: 'all',
        emptyText:'Select a state...',
        defaultValue: arrTestData[i][0],
        selectOnFocus:true
    });
    arrItems.push(combo);
}

var formPanel = new Ext.form.FormPanel({
    bodyStyle: 'padding:5px;',
    items: arrItems,
    renderTo: 'combos-container'
});


new Ext.Button({
    text: 'Do all cool things',
    renderTo: 'combos-btn',
    handler: function() {
        var arrCombos = formPanel.findByType('combo');
        Ext.each(arrCombos, function(combo){
            combo.getStore().loadData(arrTestData);
        });
    }
});

所以我们在那里做什么:
1. 对于每个商店,我们将保存父组合框 id - 这是识别相关组合框所必需的。
2. 对于每个组合框,我们保存自己的参数 - defaultValue。这是我们希望在加载商店后设置为默认值的值。
3. 监听'load' 事件并为组合设置默认值。

我希望这就是你在等待的:)

于 2013-07-09T10:49:56.373 回答
0

手动拥有autoLoad:false并加载您的商店以获取默认值。当你真的想加载商店时,你可以做

store.load()

这将加载您的商店以获取默认值。

于 2013-07-15T11:34:36.060 回答