2012-03-23 33 views
8

Có szenario sau: làm mờ một hộp văn bản (đầu vào) ghi văn bản vào hộp trạng thái của tôi (trong một số điều kiện nhất định) và nhấp vào nút cũng ghi văn bản vào hộp trạng thái.GWT: Cách đặt sự kiện vào hàng đợi (tương đương với Swing invokeLater())?

Bây giờ, khi nhấp vào nút, nó sẽ làm mờ hộp văn bản của tôi nếu nó được tập trung và điều đó sẽ làm cho trạng thái hộp nhấp nháy khi đầu tiên blurHandler sẽ ghi kết quả của nó và sau đó clickHandler. Như tôi muốn kết quả của clickHandler xuất hiện ý tưởng của tôi là để cho blurHandler đặt một sự kiện ở cuối hàng đợi kiểm tra xem một clickHandler đã viết một kết quả trước đó chưa.

Trong xoay, tôi sẽ thử SwingUtilities .invokeLater (Runnable). Tương đương trong GWT được gọi là Scheduler nhưng những lệnh trì hoãn hoặc cuối cùng này dường như luôn chạy sau sự kiện hiện tại và trước sự kiện tiếp theo. Cho đến nay tôi sử dụng Scheduler.scheduleFixedDelay với độ trễ 100ms và hy vọng nó xuất hiện sau clickHanlder trong mỗi trình duyệt. Xem tương tự problem với câu trả lời.

Tôi nghĩ rằng phải có giải pháp tốt hơn cho việc này. Cách thực sự thêm sự kiện vào cuối hàng đợi hoặc không thể do giới hạn của HTML?

+0

Lưu ý rằng vấn đề của bạn đã * gì * để làm với HTML, nhưng với động cơ Javascript của trình duyệt khác nhau. Trình lập lịch biểu thêm sự kiện vào cuối hàng đợi nhưng trình duyệt có thể tạo sự kiện tiếp theo sau khi sự kiện của bạn đã hoàn tất. Hiệu ứng này có xuất hiện trong tất cả các trình duyệt không? –

+0

có hiệu ứng xuất hiện trong tất cả các trình duyệt –

+0

Tôi không chắc đây có phải là giải pháp tốt nhất hay không, nhưng trên textBox blur bạn có thể phải xem trọng tâm có đi đến nút cụ thể hay không. Nó không có vẻ rất tao nhã. Có lẽ liên kết này sẽ giúp: http://stackoverflow.com/questions/7096120/how-to-determine-where-focus-went – nogridbag

Trả lời

4

Hãy thử:

Scheduler.get().scheduleDeferred(new Command() { 

         @Override 

         public void execute() { 
           ....... 
         } 
       }); 

Xem

Class Scheduler

+0

Tôi đã thử điều này. Làm điều này trong blurHandler vẫn làm cho lệnh được thực thi trước clickHandler. Tôi đã thử điều này trong dev và chế độ sản xuất trong FF, Chrome, Safari - cùng một hiệu ứng nhấp nháy trong tất cả các trình duyệt. –

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