【问题标题】:Populate grid with row/column coordinates in extjs在 extjs 中使用行/列坐标填充网格
【发布时间】:2015-11-24 19:04:43
【问题描述】:

我正在尝试使用来自 json 的数据填充 extjs 网格。我需要在单元格中填充的值位于给出行号和列号的对象中。我不确定如何使用这个 json 结构将值放入正确的单元格中。

这是json:

{
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/api/reports"
    }
  },
  "columns" : [ {
    "softwareBuild" : {
      "buildId" : 10,
      "generation" : "Alpha",
      "build" : "1.0"
    },
    "eventTypeDisplay" : "Event Name 1"
  }, {
    "softwareBuild" : {
      "buildId" : 10,
      "generation" : "Beta",
      "build" : "2.0"
    },
    "eventTypeDisplay" : "Event Name 1"
  }],
  "entries" : [ {
    "row" : 0,
    "column" : 0,
    "value" : 10
  }, {
    "row" : 0,
    "column" : 1,
    "value" : 20
  }, {
    "row" : 1,
    "column" : 0,
    "value" : 30
  }, {
    "row" : 1,
    "column" : 1,
    "value" : 40
  } ],
  "rows" : [ {
    "metricTypeId" : 1,
    "metricName" : "Name 1",
    "source" : "1",
  }, {
    "metricTypeId" : 2,
    "metricName" : "Name 2",
    "source" : "2",
  }]
} 

这是网格视图:

Ext.create('Ext.grid.Panel', {
    renderTo: document.body,
    store: 'DataStore',
    width: 400,
    height: 200,
    title: 'Software Metrics',
    columns: [
        {
            text: 'Dynamic Column Name',
            dataIndex: ''
        }
    ]
});

这是模型和商店:

Ext.define('DataModel', {
    extend: 'Ext.data.Model',
    fields: [ 'value', 'generation', 'build', 'metricName', 'source' ]
});


Ext.define('DataStore', {
    extend: 'Ext.data.Store'
    model: 'DataModel',
    proxy: {
        type: 'rest',
        url : 'api/reports'
    }
});

我遇到的另一个问题是如何使用 json 对象中列数组中的“构建”值填充列标题。以及如何使用行数组中的“metricName”填充第一列中的单元格。但这可能是另一个问题。

【问题讨论】:

    标签: javascript json extjs


    【解决方案1】:

    这是一个需要时间的过程,所以我会告诉你你需要做什么:

    1 - 获取您的 JSON 结构并将其分配给一个变量,您可能应该为此使用 Ext.Ajax.request。

    2 - 遍历列对象并创建另一个对象,该对象是 ExtJS 的有效列格式,例如:

    var columns = [{
        text : '1.0',
        dataIndex: 'Alpha'
    },{
        text: '2.0',
        dataIndex : 'Beta'
    }];
    

    3 - 使用 grid.reconfigure(columns); 将列应用到您的网格

    4 - 你的模型应该有fields : ['Alpha', 'Beta']

    5 - 您的商店现在应该使用内存代理,因为您使用 Ext.Ajax.request 抓取了数据。

    6 - 遍历您的条目对象并获取应添加的总行数。

    var entries = [{
      "row" : 0,
      "column" : 0,
      "value" : 10
    }, {
      "row" : 0,
      "column" : 1,
      "value" : 20
    }, {
      "row" : 1,
      "column" : 0,
      "value" : 30
    }, {
      "row" : 1,
      "column" : 1,
      "value" : 40
    }];
    
    var rows = [];
    for (var i=0;i<entries.length;i++) {
        var currentRow = entries[i].row,
            currentColumn = entries[i].column,
            columnName = columns[currentColumn].dataIndex;
    
        if(currentRow > rows.length - 1) {
            rows.length = currentRow + 1;
        }
        if (!rows[currentRow]) rows[currentRow] = {};
        rows[currentRow][columnName] = entries[i].value;
    }
    

    7 - 使用 store.loadRawData 将行值添加到您的商店

    小提琴:https://fiddle.sencha.com/#fiddle/t2g

    【讨论】:

      猜你喜欢
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多