使用Handsontable-in-handsontable,如何仅从一列返回值?



我试图在Handsontable网格中使用"Handsontable"编辑器。我希望用户能够从"下拉"类型的菜单中进行选择,但是要显示多列相关数据(例如,用户正在选择一个ID号,我希望能够显示相关的Name和Age)。我有这个工作,但用户可以点击/任何/单元格在弹出式编辑器,它会返回任何是在该单元格。在"ID"单元格上,它工作得很好,但是当我只想从ID列中获取值时,我可以很容易地获得"Name"或"Age"返回。

关于如何强制返回值/仅/是从一列的任何想法?

http://jsfiddle.net/sq9xs5a7/

document.addEventListener("DOMContentLoaded", function() {
  function getCarData() {
    return [
      ["Nissan", 2013, "black", "black"],
      ["Nissan", 2014, "blue", "blue"],
      ["Chrysler", 2015, "yellow", "black"],
      ["Volvo", 2016, "white", "gray"]
    ];
  }
  var
    carData = getCarData(),
    container = document.getElementById('example1'),
    manufacturerData,
    colors,
    color,
    colorData = [],
    hot;
  manufacturerData = [
    {name: 'BMW', country: 'Germany', owner: 'Bayerische Motoren Werke AG'},
    {name: 'Chrysler', country: 'USA', owner: 'Chrysler Group LLC'},
    {name: 'Nissan', country: 'Japan', owner: 'Nissan Motor Company Ltd'},
    {name: 'Suzuki', country: 'Japan', owner: 'Suzuki Motor Corporation'},
    {name: 'Toyota', country: 'Japan', owner: 'Toyota Motor Corporation'},
    {name: 'Volvo', country: 'Sweden', owner: 'Zhejiang Geely Holding Group'}
  ];
  colors = ['yellow', 'red', 'orange', 'green', 'blue', 'gray', 'black', 'white'];
  while (color = colors.shift()) {
    colorData.push([
      [color]
    ]);
  }
  hot = new Handsontable(container, {
    data: carData,
    colHeaders: ['Car', 'Year', 'Chassis color', 'Bumper color'],
    columns: [
      {
        type: 'handsontable',
        handsontable: {
          colHeaders: ['Marque', 'Country', 'Parent company'],
          data: manufacturerData
        }
      },
      {type: 'numeric'},
      {
        type: 'handsontable',
        handsontable: {
          colHeaders: false,
          data: colorData
        }
      },
      {
        type: 'handsontable',
        handsontable: {
          colHeaders: false,
          data: colorData
        }
      }
    ]
  });
  function bindDumpButton() {
      if (typeof Handsontable === "undefined") {
        return;
      }
      Handsontable.Dom.addEvent(document.body, 'click', function (e) {
        var element = e.target || e.srcElement;
        if (element.nodeName == "BUTTON" && element.name == 'dump') {
          var name = element.getAttribute('data-dump');
          var instance = element.getAttribute('data-instance');
          var hot = window[instance];
          console.log('data of ' + name, hot.getData());
        }
      });
    }
  bindDumpButton();
});

这是我正在做的一个很好的例子(来自HoT帮助)。这里,它的工作原理和我的一模一样。当你点击'Car'字段时,你可以选择'Germany',当我真的只想要第一列的值时。

想法吗?

您可以像下面这样为HOT-in-HOT添加getValue()方法…

document.addEventListener("DOMContentLoaded", function() {
  function getCarData() {
    return [
      ["Nissan", 2013, "black", "black"],
      ["Nissan", 2014, "blue", "blue"],
      ["Chrysler", 2015, "yellow", "black"],
      ["Volvo", 2016, "white", "gray"]
    ];
  }
  var
    carData = getCarData(),
    container = document.getElementById('example1'),
    manufacturerData,
    colors,
    color,
    colorData = [],
    hot;
  manufacturerData = [
    {name: 'BMW', country: 'Germany', owner: 'Bayerische Motoren Werke AG'},
    {name: 'Chrysler', country: 'USA', owner: 'Chrysler Group LLC'},
    {name: 'Nissan', country: 'Japan', owner: 'Nissan Motor Company Ltd'},
    {name: 'Suzuki', country: 'Japan', owner: 'Suzuki Motor Corporation'},
    {name: 'Toyota', country: 'Japan', owner: 'Toyota Motor Corporation'},
    {name: 'Volvo', country: 'Sweden', owner: 'Zhejiang Geely Holding Group'}
  ];
  colors = ['yellow', 'red', 'orange', 'green', 'blue', 'gray', 'black', 'white'];
  while (color = colors.shift()) {
    colorData.push([
      [color]
    ]);
  }
  hot = new Handsontable(container, {
    data: carData,
    colHeaders: ['Car', 'Year', 'Chassis color', 'Bumper color'],
    columns: [
      {
    type: 'handsontable',
    handsontable: {
      colHeaders: ['Marque', 'Country', 'Parent company'],
      data: manufacturerData,
      getValue: function() {
        var selection = this.getSelected();
        // Get always manufacture name of clicked row
        return this.getSourceDataAtRow(selection[0]).name;
      }
    }
      },
      {type: 'numeric'},
      {
    type: 'handsontable',
    handsontable: {
      colHeaders: false,
      data: colorData
    }
      },
      {
    type: 'handsontable',
    handsontable: {
      colHeaders: false,
      data: colorData
    }
      }
    ],
  });
});

最新更新