【问题标题】:ExtJS 4 MVC, Get Checkbox value integer instead of boolExtJS 4 MVC,获取复选框值整数而不是布尔值
【发布时间】:2014-03-21 12:28:13
【问题描述】:

我正在使用表单来编辑模型。我以 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 吗?

【问题讨论】:

  • 您说updateRecord 使其成为布尔值是正确的,因为 Ext 将您的 1 或 0 视为布尔值...根据文档:复选框的主要值是布尔值,指示是否选中了复选框。 所以我建议绕过updateRecord 并滚动您自己的验证,或者尝试以某种方式使用inputValue。你在 JSON 中得到 NaN 的事实意味着无论如何都失败了......
  • 我想,我得到 NaN 因为模型应该接收 INT 但接收到 true - BOOL。尝试使用inputValue 但没用,反正Ext.getCmp('meCheckbox').getValue() 只是true 或false

标签: json extjs checkbox extjs4


【解决方案1】:

Ext.form.Basic.updateForm 使用 getFieldValues 方法为更新的记录检索新数据,而 getFieldValues 方法只返回复选框的布尔值,而不管 inputValue 或 uncheckedValue。所以我会使用模型字段的转换函数将提供的布尔值转换为整数,如下所示:

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

【讨论】:

  • 不错。对我很有用。谢谢!
【解决方案2】:

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

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

【讨论】:

  • 不错的解决方案。也可以应用于许多其他情况。谢谢
猜你喜欢
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 2018-09-15
  • 2017-11-11
  • 2015-02-05
  • 2014-03-22
  • 1970-01-01
  • 2019-08-31
相关资源
最近更新 更多