4

美好的一天,我有一个带有布尔列的网格:

 var grid = Ext.create('Ext.grid.Panel', {
      ...
      columns: [{
           dataIndex: 'visibleForUser',
           text: 'Visible',
           editor: {
              xtype: 'checkboxfield',
              inputValue: 1 // <-- this option has no effect
           }
      },
      ...

Grid 的存储是通过 JSON 代理远程存储的。当我保存或更新行时,生成的 JSON 如下所示:

{... visibleForUser: false, ... }

如您所见,ExtJS 将复选框值序列化为JSON 术语truefalse我需要对此进行自定义并序列化,例如,1以及0如何完成此操作的任何建议?谢谢你。

4

3 回答 3

5

我刚刚将系统范围内的复选框更改为始终执行/响应01

Ext.onReady(function(){
    // Set the values of checkboxes to 1 (true) or 0 (false), 
    // so they work with json and SQL's BOOL field type
    Ext.override(Ext.form.field.Checkbox, { 
        inputValue: '1',
        uncheckedValue: '0'
    });
});

但是您可以为每个复选框添加此配置。

于 2012-08-22T11:47:09.077 回答
3

Ext JS 4.1.1serialize在记录字段上有一个新配置。当 writer 准备记录数据时,调用 serialize 方法来生成输出值,而不是仅仅获取实际的字段值。所以你可以做这样的事情:

fields: [{
    name: "visibleForUser",
    type: "boolean",
    serialize: function(v){
        return v ? 1 : 0;
    }
    /* other fields */
}]

我尽量避免覆盖默认组件行为。正如我所提到的,这只适用于 4.1.1(它是在 4.1.0 中引入的,但我相信它已经被破坏了)。因此,如果您使用的是早期版本,那么其他答案之一会更适合您。

于 2012-08-22T17:05:48.650 回答
1

您可以尝试覆盖 getValue

Ext.define('Ext.form.field.Checkbox', {
    override : 'Ext.form.field.Checkbox',
    getValue: function () {
        return this.checked ? 1 : 0;
    }
});
于 2012-08-22T09:15:07.763 回答