2010-02-11 50 views

Trả lời

61

GWT.create được trình biên dịch GWT sử dụng để ràng buộc hoãn lại. Hoãn ràng buộc là một tính năng của trình biên dịch GWT hoạt động bằng cách tạo ra nhiều phiên bản mã tại thời gian biên dịch, chỉ một trong số đó cần được tải bởi một máy khách cụ thể trong quá trình bootstrapping khi chạy.

Bạn chỉ nên sử dụng GWT.create cho những trường hợp phụ thuộc vào trường hợp sử dụng cụ thể này. Ví dụ khi tạo một lớp RPC: (MyServiceAsync)GWT.create(MyService.class). Trong tất cả các trường hợp khác, hãy sử dụng new.

Để biết thêm thông tin kiểm tra trang GWT trên thu nhập hoãn lại ràng buộc: http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsDeferred.html

+2

Cảm ơn vì điều đó - vì vậy (trong trường hợp cơ bản) nếu việc triển khai không thay đổi cho các ngôn ngữ/trình duyệt khác nhau, hãy sử dụng mới, nếu có nhiều triển khai sử dụng tạo. – RodeoClown

+0

Thực ra bạn có thể sử dụng 'GWT.create' khi không sử dụng liên kết hoãn lại. Trình biên dịch GWT sẽ dịch thành toán tử 'new' nếu không tìm thấy quy tắc ràng buộc hoãn lại. Điều đó rất hữu ích khi tạo một thành phần lib hoặc thành phần với các điểm mở rộng sẽ được các nhà phát triển khác sử dụng sau này. –

28

GWT.create sử dụng công việc ràng buộc trả chậm để xung quanh vì thiếu sự hỗ trợ phản chiếu.

Theo FAQ:

Hoãn Binding là câu trả lời của Google Web Toolkit để Java phản ánh.

Cách dễ nhất để giải thích Ràng buộc trì hoãn bằng cách bắt đầu với trường hợp sử dụng. Mỗi trình duyệt web có idiosyncrasies riêng của mình, thường là rất nhiều người trong số họ. (Số lượng tuyệt đối không thể quản lý của chúng là vấn đề GWT được tạo ra để giải quyết ngay từ đầu). Cách tiêu chuẩn Java để xử lý các idiosyncrasies sẽ là đóng gói mã tùy chỉnh vào các lớp con, với một phân lớp cho mỗi trình duyệt được hỗ trợ. Khi chạy, ứng dụng sẽ sử dụng tính năng tải lớp phản chiếu và lớp động để chọn lớp con thích hợp cho môi trường hiện tại, nạp lớp, tạo một cá thể và sau đó sử dụng cá thể đó làm nhà cung cấp dịch vụ trong suốt thời gian của chương trình.

Đây thực sự là những gì GWT làm. Tuy nhiên, môi trường JavaScript mà cuối cùng các ứng dụng GWT chạy đơn giản không hỗ trợ nạp lớp động (còn được gọi là liên kết động). Bạn chắc chắn có thể bao gồm mã để hỗ trợ mỗi trình duyệt trong mã JavaScript được tạo của bạn, nhưng để làm như vậy bạn phải bao gồm hỗ trợ cho tất cả trình duyệt nằm trong tệp ứng dụng duy nhất. Tại sao người dùng Opera phải tải xuống mã cụ thể cho Firefox, khi không có cơ hội nào ở tất cả những gì cô ấy cần?

Do ràng buộc động không khả dụng dưới dạng kỹ thuật cho GWT, GWT thay vào đó sử dụng liên kết hoãn lại. Một cách để nghĩ về điều này là "tải lớp động xảy ra tại thời gian biên dịch thay vì thời gian thực hiện". Khi trình biên dịch GWT biên dịch ứng dụng Java của bạn, nó xác định tất cả các "đồng bộ hóa" khác nhau mà nó phải hỗ trợ và tạo ra một phiên bản riêng biệt, được sắp xếp hợp lý chặt chẽ của ứng dụng cho cấu hình cụ thể đó. Ví dụ, nó tạo ra một phiên bản khác của tệp ứng dụng cho Firefox so với phiên bản dành cho Opera.

+0

Không chỉ có vậy, nhưng hầu hết các khuôn khổ dựa trên hệ mã (không chỉ để vượt qua sự thiếu phản ánh) sử dụng phương pháp GWT.create. –

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