Angular JQXGrid 单元格渲染将"value"设置为字符串,但如果传入对象,看起来会出错



Angular JqxGrid对我正在利用的行有一个cellsrender函数调用。它有参数:索引、数据字段、值、默认值、列、行数据

我想在cellsrender中做一些魔术,但似乎当列访问一个值时,它会将其字符串化为"[object]",这并不理想。我也从"行数据"的角度来看待它,但它已经被字符串化了。

如何访问实际对象以使用其属性进行渲染?我试图访问底层数据列表,但当单击并刷新数据时,由于索引不可访问,它会引发错误,所以我对如何取消绑定这些信息有点不知所措。

我很想在网格使用之前将原始数据处理成字符串,但我认为这不是最好的方法。我认为牢房看守应该这么做。

我的同事希望我将对象的所有属性分配给数据字段,但我不喜欢这个选项。如果将其视为一个动态解决方案,那么我不确定我是否喜欢将我想在一行的值中利用的每个项目的值添加到数据字段中

我以一种相当优雅的方式解决了这个问题。

所有将成为dataAdapter一部分的数据,我都会检查复杂的对象并将其字符串化。

var data = []; //dataset
data.map( row => {
let x = {};
if (obj.hasOwnProperty(v) && obj[v] && obj[v].constructor === {}.constructor){
x[v] = JSON.stringify(obj[v]);
}else {
x[v] = obj[v];
}
return x;
});

既然数据已经准备好了,列也设置好了,我们就进入单元格生成器:

col.cellsrenderer = (index: number, datafield: string, value: any, defaultvalue: any, column: any, rowdata: any): string => {
let decode = value;
try {
decoded = JSON.parse(value);
}catch (e){ 
decoded = value;
}
//Now you can do custom stuff with a formatter:
let formatter = getFormatter(XXXXX);
let cell = `<div>${formatter.format(decoded)}</div>`; 
//decoded would be an object OR a fundamental type string, number, etc.
// When doing cellrenderer, you will only be able to use globalclasses, so custom component based class defintions will not work.  If needed, you would use inline styles, or expose global css/scss for a cell.
return cell;
}

相关内容

最新更新