0

我在表单中有一个组合框,例如:

        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: false,
                        proxy: {
                            type: 'ajax',
                            url: 'example.php',
                            reader: {
                                type: 'json',
                                root: 'rows'
                            }
                        }
            }
        })

我不希望自动加载,因为当我开始时这很慢。

但是当我单击编辑按钮并将值加载到组合时,我想为组合框设置一个值

this.down('form').getForm().load({            
       url: 'load.php',
       success:function(){
       }
    });

来自 load.php 的数据,例如(combe 的名称是 ax)

{ success:true , data : { ax: '{"id":"0","name":"defaults"}' } }

但这行不通。我该怎么做谢谢。

p / s:如果我有autoLoad : true并且数据是{ success:true , data : { ax: '0' } }那么工作得很好。但是当我开始时这很慢。

4

1 回答 1

0

您要做的是确保在尝试设置组合值之前已加载组合。

您可以检查组合的商店中是否有任何数据:

if(combo.getStore().getCount() > 0)
{
   //the store has data so it must be loaded, you can set the combo's value
   //doing a form.load will have the desired effect
}
else
{
  //the store isn't loaded yet! You can't set the combo's value
  //form.load will not set the value of the combo
}

如果是这样,您可以设置该值。但更有可能的是,它不会被加载。

你也可以做这样的事情

//in the controller's init block
this.control({
  "#myEditButton" : {click: this.loadForm}
});

//a function in your controller
loadForm: function(button)
{
   var combo; //get your combo somehow, either via references or via the button 
   combo.getStore().load({
   scope: this,
   callback: 
     function(records, operation, success)
     {
        if(success)
        {
           //load your form here
        }
     }
   });
}

我知道这可能看起来像很多代码,但这是确定组合是否已加载的唯一方法。如果不是,则无法设置它的值。

第三种选择只是在打开视图之前显式加载商店。

于 2013-07-09T11:11:11.060 回答