Tôi có một trang được gọi là Đơn đặt hàng và một trang có tên là OrderDetails. Như được mô tả trong tuyệt vời MVP tutorial Tôi đang làm việc với Lịch sử (với một ValueChangeListener trung tâm) và một "event bus" HandlerManager.Sử dụng Lịch sử GWT để chuyển các tham số?
Tôi có một trình xử lý đã đăng ký cho sự kiện ai đó nhấp vào đơn đặt hàng, về cơ bản tạo OrderDetailPresenter, chuyển vào ID đơn đặt hàng (được chứa trong ShowOrderDetailEvent) và sau đó gọi History.newItem("orderDetails")
.
Điều này có một vài nhược điểm chính: Bước Lịch sử mới được tạo này KHÔNG biết ID đơn đặt hàng nào được chuyển vào. Ví dụ: nếu ai đó đánh dấu trang chi tiết đơn đặt hàng (hoặc quay lại sau trong trình duyệt của họ), họ ' sẽ nhận được một trang trống không có chi tiết đơn đặt hàng.
Vì vậy, câu hỏi của tôi là: Thay vào đó, tôi có nên làm điều gì đó như History.newItem("orderDetails?id="+id)
và sau đó phân tích cú pháp lịch sử trong trình xử lý thay đổi giá trị của mình không? Nếu vậy, có một thực hành tốt nhất, một API, hoặc thư viện để phân tích cú pháp và định dạng đối số thành một chuỗi theo cách này?
Trên thực tế GWT DOES đưa vào tài khoản sự khác biệt trong các trình duyệt. Nó thậm chí hoạt động xung quanh một số vấn đề khác nhau không được đề cập ở đây. Vì vậy, bạn có thể sử dụng bất kỳ nhân vật được đề cập. Nếu bạn muốn kiểm tra điều này, chỉ cần xem các lớp 'com.google.gwt.user.client.impl.HistoryImpl' trong tệp 'gwt-user.jar' (gwt 2.0). Và nó cũng thực hiện de/encoding để bạn có thể truyền vào '@' và nó sẽ xử lý nó. –
Âm thanh tuyệt vời. Tôi đã nhận thấy rằng GMail thực hiện chính xác điều này là tốt, nếu tôi nhấp vào một nhãn ví dụ, sau đó URL thay đổi thành "... # inbox/labelname". Tuy nhiên, URL của họ mã hóa tên nhãn nên tôi cũng làm như vậy với URL.encode và URL.decode. – Epaga
Chỉ cần hoàn thành. Nếu bạn sử dụng 'History.newItem (..)', bạn không nên giải mã/mã hóa, bởi vì GWT đã làm điều này cho bạn. Trong thực tế, nếu bạn làm điều đó, nó có thể dẫn đến các vấn đề được đề cập về Firefox. –