Handsontable 7.4 具有虚假值 (0) 的下拉单元格显示占位符

问题描述 投票:0回答:1

我正在寻找一种在下拉列表中显示数值 0 的方法,当单元格为空时,该列表还包含占位符文本。目前,如果选择 0,则占位符文本将显示出来。我希望有一个内置选项,并且如果可以的话,我希望避免将数字转换为字符串并返回(这会破坏我当前的验证方案)。以下示例是根据 HandsOnTable 下拉文档修改的。 “机箱颜色”列包含该问题。

js小提琴: https://jsfiddle.net/y3pL0vjq/

片段:

  function getCarData() {
    return [
      ["Tesla", 2017, "black", "black"],
      ["Nissan", 2018, "blue", "blue"],
      ["Chrysler", 2019, "yellow", "black"],
      ["Volvo", 2020, "white", "gray"]
    ];
  }
  var
    container = document.getElementById('example1'),
    hot;
  hot = new Handsontable(container, {
    data: getCarData(),
    colHeaders: ['Car', 'Year', 'Chassis color', 'Bumper color'],
    columns: [
      {},
      {type: 'numeric'},
      {
        type: 'dropdown',
        placeholder: "blah",
        source: [null, 0, 1, 2, 3]
      },
      {
        type: 'dropdown',
        source: ['yellow', 'red', 'orange', 'green', 'blue', 'gray', 'black', 'white']
      }
    ]
  });
handsontable
1个回答
0
投票

我发现处理这个数字下拉列表的最佳方法是省略“type”属性并将编辑器和验证器指定为“自动完成”。然后创建一个自定义渲染器,将 NumericRenderer 功能与自动完成下拉列表合并。

要最终确定与本机下拉功能类似的外观和感觉,然后添加“strict: true”和“filter: false”,如下拉文档中所述。

在内部,cell {type: "dropdown"} 等价于 cell {type: "autocomplete", strict: true, filter: false}。 下拉文档

示例:

  function getCarData() {
    return [
      ["Tesla", 2017, null, "black"],
      ["Nissan", 2018, 0, "blue"],
      ["Chrysler", 2019, 1, "black"],
      ["Volvo", 2020, 2, "gray"]
    ];
  }
  var
    container = document.getElementById('example1'),
    hot;

  function myRenderer(instance, td, row, col, prop, value, cellProperties) {
    Handsontable.renderers.NumericRenderer.apply(this, arguments);
    td.innerHTML += '<div class="htAutocompleteArrow">▼</div>'
  }
  
  hot = new Handsontable(container, {
    data: getCarData(),
    colHeaders: ['Car', 'Year', 'Chassis color', 'Bumper color'],
    columns: [
      {},
      {type: 'numeric'},
      {
        editor: 'autocomplete',
        validator: 'autocomplete',
        renderer: myRenderer,
        strict: true,
        filter: false,
        placeholder: "blah",
        source: [null, 0, 1, 2, 3]
      },
      {
        type: 'dropdown',
        source: ['yellow', 'red', 'orange', 'green', 'blue', 'gray', 'black', 'white']
      }
    ]
  });
© www.soinside.com 2019 - 2024. All rights reserved.