如何根据json数据extjs 4设置radiogroup radiofield

时间:2012-03-30 11:58:39

标签: javascript extjs extjs4

hi论坛成员我在extjs 4中设置radiofield有一个问题

我的表单radiogroup xtype代码如下所示

{
  xtype: 'radiogroup',
  dataIndex: 'gender',
  margin: 5,
  fieldLabel: 'Gender',
  items: [{
    xtype: 'radiofield',
    name: 'gender',
    boxLabel: 'Male',
    inputValue:'0'
  }, {
    xtype: 'radiofield',
    name: 'gender',
    boxLabel: 'Female',
    inputValue:'1'
  }]
}

我收到的json数据是

{
  "total": 1,
  "success": true,
  "employeedata": [{
     "username": "yaryan997",
     "surname": "Singh",        
     "firstname": "Yogendra",
     "gender": false
  }]
}

我的员工列表视图包含执行以下功能的操作列editEmployee

editEmployee:function(grid,no,rowindex,colindex,temp) {
        alert('Edit EMPLOYEE button pressed');
        var rec = grid.store.getAt(rowindex);
        var employeeid = rec.get('id');

        store = grid.getStore();
        store.load({
            params: {'employeeid':employeeid},
            scope: this,
            callback: function(records, operation, success) {
                //the operation object contains all of the details of the load operation
                console.log(records);
                this.getEmployeeEdit().editform=1;
                this.getEmployeeEditForm().loadRecord(rec);                 
                this.getEmployeeEdit().show();
            }
        });
        this.getEmployeeStore().load();
    },

基于id,显示editEmployee视图。我的编辑员工正确显示所有值,但只有问题在于radiofield。他们没有显示所选的值。

我提供给你的json数据,就像雇员一样

我无法根据我从json收到的数据设置radiogroup性别。

请为我建议一些解决方案。

2 个答案:

答案 0 :(得分:1)

首先,您应将inputValue设为'false'和'true'。第二个是无线电组的新设计。您可以在sencha论坛的帖子中找到解决方案。请参阅:http://www.sencha.com/forum/showthread.php?187185-Set-a-int-value-on-a-radiogroup-fails&goto=newpost

问题是setValue期待一个对象,只有在你必须为性别的数据类型时才会出现这种情况;一个用于男性,一个用于女性......这就是为什么我将此作为错误发布的原因。从我的帖子中删除覆盖代码。

setValue: function (value) {
    if (!Ext.isObject(value)) {
        var obj = new Object();
        obj[this.name] = value;
        value = obj;
    }
    Ext.form.RadioGroup.prototype.setValue.call(this, value);
}  

答案 1 :(得分:0)

实际上,问题在于您尝试将布尔值传递给radioBox

"gender": false

你不应该这样做。

如果将radioBox / true值传递给false方法,则setValue将设置为选中/取消选中,忽略inputValue的内容字段设置为。

这是源代码,我们可以看到传入的任何其他值最终将以boolean参数的递归调用结束:

setValue: function(v) {
    var me = this,
        active;

    if (Ext.isBoolean(v)) {
        me.callParent(arguments);
    } else {
        active = me.getManager().getWithValue(me.name, v, me.getFormId()).getAt(0);
        if (active) {
            active.setValue(true);
        }
    }
    return me;
}