2013-08-18 41 views
6

在这两种选择中,我必须访问最有效的控件的值。哪种方法可以最有效地访问控件的值?

getComponent("ControlName").getValue(); 

dataSource.getItemValue("FieldName"); 

我发现getComponent似乎有时不返回当前值,但访问dataSource似乎更可靠。那么,从性能的角度来看,它是如何使用的?

dataSource.getValue似乎在我尝试过的任何地方都能正常工作。但是,使用rowData时,我似乎还需要做一个rowData.getColumnValue(“Something”)。 rowData.getValue(“Something”)失败。

+0

也可以在组件和数据源中获得不同的值类型。 –

回答

17

都没有。最快的语法是dataSource.getValue ("FieldName")getItemValue方法在文档数据源上仅可靠,而getValue方法不仅可用于通过视图数据源访问的视图条目(尽管在该上下文中,您可以将它传递给视图列的编程名称,而不是必须与字段名称相同),但也可用于您开发或安装的任何自定义数据源(例如第三方扩展库)。此外,它会自动进行类型转换,如果您使用getItemValue代替,则必须自行完成。

即使是在非常简单的页面,dataSource.getValue ("FieldName")是5倍的速度getComponent ("id").getValue(),因为正如弗雷德里克提到,首先它必须找到的组件,然后问它的价值是什么?它背后的场景,无论如何只是要求数据源。因此,自己问问数据源总是会更快。

备注:对应的写入方法是dataSource.setValue ("FieldName", "NewValue"),而不是dataSource.replaceItemValue ("FieldName", "NewValue")。两者都可以工作,但setValue也可以进行与getValue相同的类型转换,因此您可以传递不严格符合旧Domino Java API的数据,并且它通常只是根据顺序计算出需要转换的值对Domino来说是“安全的”。

+0

谢谢,这是非常重要的知道我有一个XPage,我做这种查找。现在回到代码中,找到所有我使用它并改变它们的地方。这是我复制到我的备忘单文件以供将来参考和提醒的文章。很多时候,最明显的方法远不是最好的方法。 –

+0

这是一个跟进。在重复控件中,我通过将一个computedField绑定到rowData中的一个元素来显示rowData中的值。我猜测rowData.getValue会更快? –

+0

啊 - 一个无价的(双关语)开发的最佳实践:永远不要追随支持元素/ thingi,坚持数据源。 – stwissel

4

我会说最有效的方法是直接从数据源获取值。 因为如果你使用getComponent(“ControlName”)。getValue();你将首先得到组件,然后从中获取getValue。所以如果你问我,从数据源获得一个单一的数据源效率会更高。

相关问题