ExtJS 4 MVC,获取Checkbox值整数而不是bool

时间:2014-03-21 12:28:13

标签: json extjs checkbox extjs4

我正在使用表单编辑模型。我以JSON格式接收数据。这是我的问题: 我只在INT:1或0中收到Checkbox的数据,我无法更改它。 JSON:

{ "checkboxValue": 1 }

ExtJS模型中的此字段定义为INT类型。型号:

{name: "checkboxValue", type: Ext.data.Types.INT},

然后我设置值以这种方式形成:

formCmp.loadRecord(loadedStore.getAt(0));

并且我的复选框设置正确:当我收到 1 时,已选中 0 - 未选中。

但是当我尝试保存记录并以这种方式将数据发送到服务器时:

form.updateRecord(form.getRecord());
record.save();

我需要Checkbox也有INT值 - 1或0.但它只有BOOL值 - true或false所以当发送JSON时值为NaN。

{
    "checkboxValue": NaN
}

我认为,该函数.updateRecord(..)遍历所有元素,当它到达复选框时,它会尝试获取值,并且值为BOOL

有人知道如何设置复选框'输出值INT?

2 个答案:

答案 0 :(得分:5)

Ext.form.Basic.updateForm使用getFieldValues方法检索更新记录的新数据,而getFieldValues方法仅返回复选框的布尔值,而不管 inputValue uncheckedValue <等属性/ strong>即可。所以我会使用转换函数为模型的字段将提供的布尔值转换为整数,方式如下:

Ext.define('MyModel', {
    extend: 'Ext.data.Model',
    fields: [
        {
            name: 'flag',
            type: 'int',
            convert: function (v, record) {
                return typeof v === 'boolean' ? (v === true ? 1 : 0) : v;
            }
        }
    ],
    ...
});

这是一个完整的jsfiddle

答案 1 :(得分:1)

我认为可以通过一些简单的覆盖来完成

Ext.create('Ext.form.Panel', {
    bodyPadding: 10,
    width: 300,
    title: 'Pizza Order',
    items: [
        {
            xtype: 'fieldcontainer',
            fieldLabel: 'Toppings',
            defaultType: 'checkboxfield',
            items: [
                {
                    boxLabel  : 'Topping?',
                    name      : 'topping',
                    id        : 'checkbox1',

                    // include these two properties in your checkbox config
                    uncheckedValue: 0,
                    setValue: function(checked) {
                        var me = this;

                        arguments[0] = checked ? 1 : me.uncheckedValue;

                        me.callParent(arguments);

                        return me;
                    }
                }
            ]
        }
    ],
    renderTo: Ext.getBody()
});