美好的一天,我有一个布尔列的网格:
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将复选框值序列化为true
或false
JSON术语。
我需要自定义此项并序列化为1
和0
,任何建议如何实现此目的?谢谢。
答案 0 :(得分:5)
我刚刚在系统范围内更改了我的复选框,以便始终对0
和1
采取行动/做出回复:
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;
}
});