ext版本2.1


1. 单选按钮组实例化代码如下:


this._radioIsSingleSource = new Ipms.component.RadioGroup({
        fieldLabel: '单一来源',
        allowBlank: false,
        width: 100,
        items: [{
                readOnly: false,
                boxLabel: '是',
                width: 10,
                name: 'SingleSource',
                inputValue: true,
                checked: true
             }, {
                readOnly: false,
                boxLabel: '否',
                width: 10,
                name: 'SingleSource',
                inputValue: false,
                checked: true
            }]
    });


2. 依照Ext的习惯RadioGroup的items就应该是我们自定义的items,不过事实不是这样的,他在我们自定义的items外面又嵌套了一个MixedCollection类型的items。代码如下(有删减):


// CheckBoxGroup private
onRender : function(ct, position){
    //..
    // 构造布局
    for(var i=0, len=this.items.length; i<len; i++){ // this.items就是我们的items
        var ci = i % numCols; // 根据列数控制行
        if(this.items[i].fieldLabel){
             this.items[i].hideLabel = false;
        }
        cols[ci].items.push(this.items[i]); // 把我们的items分配到相应的列
    };
    // ..
    // 构造参数
    Ext.apply(panelCfg, {
        layoutConfig: {columns: numCols},
        items: cols
    });
    // 实例化panel
    this.panel = new Ext.Panel(panelCfg);
    // 查询panel的所有Field对象
    var fields = this.panel.findBy(function(c){
        return c.isFormField;
    }, this);
    // 把Field对象添加到items中
    this.items = new Ext.util.MixedCollection();
    this.items.addAll(fields); // 注意这里,结果为 this.items.items = [fields]
    //..
},

所以,我们的items是数据:Field的配置信息;而RadioGroup的items是真正的控件Field。


3. 之所以要搞清楚这些,是因为ext2.1中没有setValue方法的定义,代码如下,需要我们自己重写。

/**
 * @method initValue
 * @hide
 */
initValue : Ext.emptyFn,
/**
 * @method getValue
 * @hide
 */
getValue : Ext.emptyFn,
/**
 * @method getRawValue
 * @hide
 */
getRawValue : Ext.emptyFn,
/**
 * @method setValue
 * @hide
 */
setValue : Ext.emptyFn,