2013-08-18 27 views
6

Trong hai lựa chọn, tôi phải truy cập giá trị của điều khiển hiệu quả nhất?Cách nào hiệu quả nhất để truy cập giá trị của điều khiển?

getComponent("ControlName").getValue(); 

hay

dataSource.getItemValue("FieldName"); 

Tôi thấy rằng nhân dịp getComponent dường như không trả về giá trị hiện tại, nhưng truy cập vào dataSource có vẻ là đáng tin cậy hơn. Vì vậy, nó làm cho sự khác biệt nhiều từ một quan điểm hiệu suất mà một trong những được sử dụng?

DataSource.getValue dường như hoạt động ở mọi nơi mà tôi đã thử. Tuy nhiên, khi làm việc với rowData tôi vẫn dường như cần phải thực hiện một rowData.getColumnValue ("Something"). rowData.getValue ("Cái gì đó") không thành công.

+0

Có thể có sự khác biệt về loại giá trị bạn nhận được từ thành phần so với nguồn dữ liệu. –

Trả lời

17

Không. Cú pháp nhanh nhất là dataSource.getValue ("FieldName"). Phương thức getItemValue chỉ đáng tin cậy trên nguồn dữ liệu tài liệu, trong khi phương thức getValue cũng không chỉ khả dụng trên các mục xem được truy cập thông qua nguồn dữ liệu chế độ xem (mặc dù trong ngữ cảnh đó, bạn sẽ chuyển tên đó theo chương trình của cột chế độ xem nhất thiết phải cùng tên với một trường), nhưng cũng sẽ có sẵn trên bất kỳ nguồn dữ liệu tùy chỉnh nào mà bạn phát triển hoặc cài đặt (ví dụ: thư viện tiện ích mở rộng của bên thứ ba). Hơn nữa, nó thực hiện chuyển đổi kiểu tự động mà bạn phải tự làm nếu bạn đã sử dụng getItemValue thay thế.

Ngay cả trên các trang rất đơn giản, dataSource.getValue ("FieldName") là 5 lần nhanh như getComponent ("id").getValue(), bởi vì, như Fredrik đề cập, trước hết nó phải tìm thành phần, và sau đó yêu cầu nó những gì giá trị là ... trong đó, phía sau cảnh, chỉ yêu cầu nguồn dữ liệu. Vì vậy, sẽ luôn nhanh hơn nếu chỉ tự hỏi nguồn dữ liệu.

LƯU Ý: phương pháp ghi tương ứng là dataSource.setValue ("FieldName", "NewValue"), không dataSource.replaceItemValue ("FieldName", "NewValue"). Cả hai sẽ hoạt động, nhưng setValue cũng thực hiện cùng một loại chuyển đổi mà getValue thực hiện, vì vậy bạn có thể chuyển dữ liệu không tuân thủ nghiêm ngặt Domino Java API cũ và nó thường chỉ ra giá trị cần được chuyển đổi theo thứ tự để được "an toàn" cho Domino để lưu trữ.

+0

Cảm ơn, điều này thực sự quan trọng để biết tôi có một XPage mà tôi làm loại tra cứu này. Bây giờ trở lại mã và tìm thấy tất cả những nơi mà tôi sử dụng này và thay đổi chúng. Đây là bài đăng mà tôi đã sao chép vào tài liệu cheatsheet của tôi để tham khảo và nhắc nhở trong tương lai. Nhiều lần phương pháp rõ ràng nhất là cách xa phương pháp tốt nhất. –

+0

Dưới đây là một chút theo dõi. Trong điều khiển lặp lại, tôi hiển thị các giá trị từ rowData bằng cách liên kết một computedField với một fieled trong rowData. Tôi đoán rằng một rowData.getValue sẽ nhanh hơn? –

+0

Ah - một thực hành tốt nhất vô giá (chơi chữ) nhằm phát triển: không bao giờ đi sau phần tử sao lưu/thingi, gắn bó với nguồn dữ liệu. – stwissel

4

Tôi sẽ nói rằng cách hiệu quả nhất là lấy giá trị trực tiếp từ nguồn dữ liệu. Bởi vì nếu bạn sử dụng getComponent ("ControlName"). GetValue(); trước tiên bạn sẽ làm việc với thành phần và sau đó là getValue từ đó. Vì vậy, làm một nhận được từ nguồn dữ liệu là hiệu quả hơn nếu bạn hỏi tôi.

Các vấn đề liên quan