Javascript ExtJS 4,自定义Ext.grid.Panel的布尔列值
您好,我有一个带有布尔列的网格:Javascript ExtJS 4,自定义Ext.grid.Panel的布尔列值,javascript,extjs,extjs4,Javascript,Extjs,Extjs4,您好,我有一个带有布尔列的网格: var grid = Ext.create('Ext.grid.Panel', { ... columns: [{ dataIndex: 'visibleForUser', text: 'Visible', editor: { xtype: 'checkboxfield', inputValue: 1 // <
var grid = Ext.create('Ext.grid.Panel', {
...
columns: [{
dataIndex: 'visibleForUser',
text: 'Visible',
editor: {
xtype: 'checkboxfield',
inputValue: 1 // <-- this option has no effect
}
},
...
如您所见,ExtJS将复选框值序列化为true
或false
JSON术语。
我需要对此进行定制并序列化,比如说,
1
和0
,有什么建议如何实现这一点吗?谢谢。您可以尝试覆盖getValue
Ext.define('Ext.form.field.Checkbox', {
override : 'Ext.form.field.Checkbox',
getValue: function () {
return this.checked ? 1 : 0;
}
});
我刚刚将系统范围内的复选框更改为始终对
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'
});
});
但您可以只添加此“按配置”复选框。Ext JS 4.1.1在记录字段上有一个新的
序列化配置。当编写器准备记录数据时,将调用serialize方法来生成输出值,而不仅仅是获取实际字段值。所以你可以这样做:
fields: [{
name: "visibleForUser",
type: "boolean",
serialize: function(v){
return v ? 1 : 0;
}
/* other fields */
}]
我尽可能避免覆盖默认组件行为。正如我所提到的,这只在4.1.1中起作用(它是在4.1.0中引入的,但我相信它已经坏了)。因此,如果您使用的是早期版本,其他答案中的一个会更适合您。我上周也遇到了同样的问题。checkboxfield接受true、'true','1','on',但只返回布尔值!我认为您必须重写checkboxfield类才能实现这一点。感谢您的回答,由于某些原因,此解决方案没有适用于ExtJS 4.1.0和4.1.1。我只是用4.1.1进行了尝试,效果很好。您是如何指定字段的?谢谢您的回答,但由于某些原因,此解决方案没有针对ExtJS 4.1.0和4.1.1进行标记,我在json中仍然有“true/false”
fields: [{
name: "visibleForUser",
type: "boolean",
serialize: function(v){
return v ? 1 : 0;
}
/* other fields */
}]