2012-08-22 28 views
4

好日子布尔列值,我有布尔列网格:ExtJS的4,定制Ext.grid.Panel

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

电网的商店是远程通过JSON代理。当我保存或更新行,所产生的JSON 样子:

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

正如你看到的,ExtJS的序列化复选框值truefalse JSON条款。 我需要定制这个和序列化,比如说,10,任何建议如何做到这一点?谢谢。

+0

上周我有同样的问题。 checkboxfield的值为true,'true','1','on',但**仅返回布尔值!**我认为您必须重写checkboxfield-class来完成此操作。 – devOp

回答

1

你可以尝试覆盖的getValue

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

这是唯一可行的解​​决方案,谢谢 – Dfr

5

我只是改变了我的复选框全系统始终ACT /于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' 
    }); 
}); 

但是你可以只添加此配置每个复选框。

+0

感谢您的回答,但由于某些原因,此解决方案没有适用于ExtJS 4.1.0和4.1.1,我仍然在json中有“true/false” – Dfr

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中引入的,但我相信它已被破坏)。所以如果你使用的是早期版本,其他答案之一会更适合你。

+0

感谢您的支持答案,由于某种原因,这个解决方案没有用于ExtJS 4.1.0和4.1.1 – Dfr

+0

我只是用4.1.1试过,它工作正常。你如何指定你的领域? – Eric