我有一个服务器端脚本(PHP)返回JSON数据来填充ExtJS网格。
此数据来自MySQL查询,包含一些NULL值。
当PHP将其编码为JSON表示法时,它保持NULL完整:
{"id":"33","name":"Test1","url":null,"cls":"x-tree-noicon","expanded":true}
但是......当这些数据显示在ExtJS网格中时,它会在NULL值的位置显示“ null ”字符串。
我不希望它显示“ null ”。我只想把它弄空(一个空字符串)。
实现这一目标的最简单方法是什么?
感谢。
答案 0 :(得分:2)
我不确定最简单但最让我想到的是创建自定义renderer
。你可以使用这样的东西:
function render(value){
if(value === null){
value = '';
}
return value;
}
答案 1 :(得分:2)
WoLpH的回答是正确的。我自己的问题在某种程度上“不正确”......: - )
事实上,我正在处理 treegrid (Ext.ux.tree.TreeGrid),而不是常见的ExtJS网格(Ext.grid.GridPanel)。
treegrid的列是{strong> 的Ext.grid.Column类型,作为公共网格。它们属于 Ext.list.Column 类型。
这意味着渲染器配置选项不适用(它存在且适用于Ext.grid.Column,但不适用于Ext.list.Column)。
要更改Ext.list.Column的呈现,可以使用 tpl 配置选项,该选项使用Ext.XTemplate机制。
下面,我分享了 treegrid 列的配置,该列完成了我想要的操作:
tpl: '<tpl if="url === null"></tpl><tpl if="url !== null">{url}</tpl>'
上面的配置使我的列在 treegrid 中为NULL值呈现空字符串,而不是“ null ”字符串!
最后说明:我投票支持WoLpH的答案,因为它是正确的。我的问题是误导,我宁愿不改变/编辑它,而是作为另一个答案分享我自己的发现。我也感谢他,因为它让我专注于正确的事情。感谢。
答案 2 :(得分:2)
您的另一个选择是从后端处理它。您需要在结果集中检查任何NULL实例,并将它们转换为空字符串,然后再将其返回给客户端。
答案 3 :(得分:2)
您是否定义了Ext.data.Model?如果你定义和Ext.data Model并在Ext.data.Store中使用它来读取JSON字符串非常容易......
您只需声明字段类型:'auto'
试试这个:
Ext.define('testModel', {
extend : 'Ext.data.Model',
fields :[
{name: 'Id', type: 'int'},
{name: 'name', type: 'string'},
{name: 'url', type: 'auto'},
{name: 'cls', type: 'string'},
{name: 'expanded', type: 'boolean'}
]
});
var testStore = Ext.create('Ext.data.Store', {
model : 'testModel',
proxy : {
type : 'memory',
reader : {type:'json'}
}
});
并使用testStore填充网格中的数据。
答案 4 :(得分:1)
在ExtJS 3.4中,有一个useNull属性,可以为数字字段设置(尽管不是字符串)。
http://docs.sencha.com/extjs/3.4.0/#!/api/Ext.data.Field-cfg-useNull
(可选)将接收的数据转换为数字类型时使用 (int或float)。如果无法解析该值,则为null 如果useNull为true,则使用,否则该值为0.默认为 假
默认为:false
E.g。
{
name: 'myId',
type: 'int',
useNull: true
},