2013-08-18 46 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。所以如果你問我,從數據源獲得一個單一的數據源效率會更高。

相關問題