代码之家  ›  专栏  ›  技术社区  ›  Fallenreaper

Angular JQXGrid cellsrender将“value”设置为字符串,但如果传入一个对象则会出错

  •  0
  • Fallenreaper  · 技术社区  · 6 年前

    AngularJQXGrid对我正在使用的行有一个cellsRender函数调用。它有如下论点:

    我想在cellsrender中做些魔术,但是当列访问一个值(它是一个对象)时,它将把它串成“[对象]”,这并不理想。我也从“rowdata”的角度来看待它,但它已经被严格化了。

    我很想在网格使用原始数据之前将其处理为字符串,但我不认为这是最好的选择。我想牢房管理员应该这么做。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Fallenreaper    6 年前

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

    所有将成为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;
    });
    

    现在数据已经准备好,列已经设置好,我们进入cellsender:

    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;
    }