Extjs Combo - 如何使用 GetForm().load 将值加载到组合

Posted

技术标签:

【中文标题】Extjs Combo - 如何使用 GetForm().load 将值加载到组合【英文标题】:Extjs Combo - How to load value to combo using GetForm().load 【发布时间】:2013-07-09 02:26:54 【问题描述】:

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

        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' ,那很好。但是当我开始时,这很慢。

【问题讨论】:

【参考方案1】:

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

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

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
        
     
   );

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

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

【讨论】:

我有很多组合框(大约 5..),如果我这样做,我认为这很复杂 :(

以上是关于Extjs Combo - 如何使用 GetForm().load 将值加载到组合的主要内容,如果未能解决你的问题,请参考以下文章

Extjs 4.1 - 如何等待组合中的所有商店被加载

Extjs 4.1 Combo - 查找记录功能失败

ExtJs中Combo组件默认选中

ExtJS:当我点击展开时,Widget Combo重置所有字段的值

Extjs3 Combo实现百度搜索查询

EXTJS Combo 集问题