1

我有表格的表格。该表有一些智能字段。

我的问题是,当我(通过初始化)在表中填充数据时,所有智能字段都会调用带有 id 的 getDataByKey (正确的),但它并没有像我期望的那样被调用一次,而是被调用了 30 次。

我挖了一点答案,我发现这个函数被调用了很多次,因为在所有调用的表内的类AbstractTable里面有很多调用存储在里面(512 insted 9)。processDecorationBufferm_cellLookupBuffer

有没有人有同样的问题?

4

1 回答 1

0

当您在表中有 SmartColumn 时,侦察员需要为每一行执行 Lookup “key -> text”。正如你所提到的,在某些情况下它可能很昂贵。这就是为什么有一个额外的概念:BatchLookupCall / BatchLookupService。

这个想法是首先收集所有行和所需的 LookupCall,然后批量处理它们。

为了回答你的问题,我必须建立一个小型游乐场项目。这是我注意到的关键点:

您的密钥类型

Batch LookupCall 检查调用的 equals 方法,该方法依赖于关键对象的相等性。如果您使用自定义类型作为键,请确保equals()hashCode()正确实施。

在表中添加行的方式

如果您一个接一个地添加行,如下所示:

Table table = getMyTableField().getTable();
ITableRow r;

r = table.addRow(table.createRow());
table.getTextColumn().setValue(r, "Lorem");
table.getMyColumn().setValue(r, 1L);

r = table.addRow(table.createRow());
table.getTextColumn().setValue(r, "Ipsum");
table.getMyColumn().setValue(r, 3L);

r = table.addRow(table.createRow());
table.getTextColumn().setValue(r, "Dolor");
table.getMyColumn().setValue(r, 1L);

r = table.addRow(table.createRow());
table.getTextColumn().setValue(r, "Figus");
table.getMyColumn().setValue(r, 4L);

Scout 过于频繁地计算表格内容……我可以观察到对查找服务的调用过多。我认为在这个领域有一些优化的可能性。

如果您在一个步骤中导入所有行,例如使用FormData 或 TablePageData 中包含的TableData,则不会发生这种情况。

于 2014-08-28T10:12:45.410 回答