ExtJS 4,自定义Ext.grid.Panel的布尔列值

时间:2012-08-22 08:31:02

标签: javascript extjs extjs4

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

 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将复选框值序列化为truefalse JSON术语。 我需要自定义此项并序列化为10,任何建议如何实现此目的?谢谢。

3 个答案:

答案 0 :(得分: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'
    });
});

但你可以在每个复选框中添加此配置。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

您可以尝试覆盖getValue

Ext.define('Ext.form.field.Checkbox', {
    override : 'Ext.form.field.Checkbox',
    getValue: function () {
        return this.checked ? 1 : 0;
    }
});