Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json extjs4mvc,获取复选框值整数而不是bool_Json_Extjs_Checkbox_Extjs4 - Fatal编程技术网

Json extjs4mvc,获取复选框值整数而不是bool

Json extjs4mvc,获取复选框值整数而不是bool,json,extjs,checkbox,extjs4,Json,Extjs,Checkbox,Extjs4,我正在使用表单编辑模型。我接收JSON格式的数据。我的问题是: 我只接收INT:1或0中复选框的数据,无法更改它。JSON: { "checkboxValue": 1 } ExtJS模型中的此字段定义为INT类型。型号: {name: "checkboxValue", type: Ext.data.Types.INT}, 然后我设置值,以这种方式形成: formCmp.loadRecord(loadedStore.getAt(0)); form.updateRecord(form.getR

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

{ "checkboxValue": 1 }
ExtJS模型中的此字段定义为INT类型。型号:

{name: "checkboxValue", type: Ext.data.Types.INT},
然后我设置值,以这种方式形成:

formCmp.loadRecord(loadedStore.getAt(0));
form.updateRecord(form.getRecord());
record.save();
我的复选框设置正确:当我收到1时,它被选中,0-未选中

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

formCmp.loadRecord(loadedStore.getAt(0));
form.updateRecord(form.getRecord());
record.save();
我需要复选框也有INT值-1或0。但它只有BOOL值-true或false,所以当发送JSON时,该值为NaN

{
    "checkboxValue": NaN
}
我认为,该函数
.updateRecord(…)
遍历所有元素,当它到达复选框时,它尝试获取值,值为BOOL


有人知道如何使复选框的输出值为INT吗?

我认为可以通过一些简单的覆盖来实现

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

Ext.form.Basic.updateForm使用getFieldValues方法检索更新记录的新数据,而getFieldValues方法仅为复选框返回布尔值,而不考虑诸如inputValue取消选中Dvalue之类的属性。因此,我将使用模型字段的convert函数,以如下方式将提供的布尔值转换为整数:

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;
            }
        }
    ],
    ...
});

这里有一个完整的

你说的是正确的,
updateRecord
使它成为bool,因为Ext将你的1或0视为bool。。。根据文档:复选框的主值是布尔值,指示是否选中该复选框。因此,我建议您绕过
updateRecord
并滚动您自己的验证,或者尝试以某种方式使用。在JSON中得到NaN的事实意味着无论如何都有问题……我想,我得到NaN是因为模型应该接收INT,但接收true-BOOL。尝试使用
inputValue
,但无效,无论如何
Ext.getCmp('meCheckbox')。getValue()
仅为true或false。这对我很有用。谢谢很好的解决方案。也可以应用于许多其他情况。谢谢