GoJS:使用 itemArray 填充 Table

GoJS: Filling a Table using an itemArray

我有一个看起来像这样的模板(我也在使用 jQuery,因此我们的 GraphObject.make 不是 $ 而是 _):

_(go.Panel, 'Table', {
      itemTemplate: itemTemplate(_)
    },
    new go.Binding('itemArray', 'items')
)

当然这部分不是整个模板,我只包括重要的片段。

我现在想做的是制作一个 itemTemplate(_) 实际上 return 一行接一行(取决于 items 数组中元素的数量。

所以我试过 itemTemplate() 这样的

itemTemplate = function(_) {
  return _(
      go.Panel,
      'Horizontal',
      {
        margin: 2
        col: 1
      },
      new go.Binding('row','row')
      _(
        go.Shape,
        'Rectangle',
        {
          stretch: go.GraphObject.Horizontal,
          height: 5
        }
      ),
      _(
        go.TextBlock,
        {
          margin: 2
        },
        new go.Binding('text', 't')
      )
  );
};

说到这里,我恍然大悟。使用这种方法,我需要 return 2 个面板才能获得预期的输出。

如果有人想知道为什么行上有绑定,我在上面 go.Binding 中使用回调解决了这个问题,如下所示:

new go.Binding('itemArray', 'items',
        function(d) {
          for (i = 0; i < d.length; i++) {
            d[i].row = i;
          }
          return d;
        }
      )

所以这是我的问题:是否可以在 itemTemplate 周围有一个包装面板?像这样?

或者是否可以为每一列 return 两个单独的模板?

或者还有其他我不知道的解决方案吗?

是的,Panel.itemTemplate 可以是类型为 TableRowPanel .然后该面板的每个元素都可以适当地设置其列。该行是自动设置的。

请参阅 http://gojs.net/latest/intro/itemArrays.html

中的讨论和示例