handsontable:如何使用整个数据行(对象)作为热列的数据?

时间:2016-08-24 18:18:45

标签: angularjs handsontable

第一次在我的项目中使用handsontable 0.26.x的Angular指令,我有下表:

该表显示了一些项目,其范围为$scope.plants,并且有三个修复列。第三列有点特殊,因为我在那里有一个特殊的渲染器,我想传递整个数据行对象(工厂)。

<hot-table datarows="plants" settings="hotTableSettings">
  <hot-column data="name" title="Name"></hot-column>
  <hot-column data="power" title="Power"></hot-column>
  <hot-column data="???" title="AdditionalInfo" renderer="measurementRenderer"></hot-column>
</hot-table>

我现在遇到的问题是:对于第三列,我有自己的自定义渲染器(measurementRenderer),它需要来自plant的多个信息。所以我需要传递热表当前正在迭代的整个工厂对象,而不仅仅是它的一个属性,作为{{1}的数据 }。这是因为我的自定义渲染器的渲染逻辑基于我的hot-column项的多个属性,而不仅仅是一个。

在上面的代码中,您可以看到我放置plant的位置。如何引用作为data="???"

列表一部分的工厂对象 就我所见,

<hot-table datarows="plants"...不提供类似<hot-table>的内容,也不提供<hot-table datarows="plan in plants"<hot-column data='this'<hot-column data='self'之类的内容。这里最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

我提出的解决方案是从渲染器内的表数据源中查找行数据。

渲染器获取行号作为参数,由于表可以排序,我通过translateRow的{​​{1}}方法将行号转换为数据源的实际索引。

最后,我在ColumnSortingPlugin中拥有了我的植物对象,可以随心所欲地渲染它。

rowData

对于$scope.measurementRenderer = function (instance, td, row, col, prop, value, cellProperties) { var translatedRow = instance.getPlugin('columnSorting').translateRow(row); var rowData = instance.getSourceData()[translatedRow]; td.innerHTML = rowData. (... any special logic here) return td; }; ,数据参数实际上根本不相关。 不确定这是否是最优雅的解决方案,但它确实有效。