2010-09-06 41 views
22

Tôi muốn thực hiện tính năng 'tìm kiếm trực tiếp' hoặc 'đề xuất tìm kiếm' trong một ứng dụng web sử dụng Khung Dojo. Nó sẽ tương tự như cách tìm kiếm của Google và Bing hiển thị các kết quả phù hợp khi bạn nhập: khi bạn nhập vào hộp tìm kiếm, danh sách các đối sánh tiềm năng sẽ xuất hiện bên dưới. Các tìm kiếm sẽ được thực hiện phía máy chủ, với kết quả được gửi trở lại trình duyệt bằng AJAX.Làm cách nào để có thể thực hiện các đề xuất tìm kiếm/tìm kiếm trực tiếp bằng Dojo?

Có ai biết cách tốt để thực hiện việc này bằng Dojo không?

Dưới đây là một số lựa chọn tiềm năng:

  • Việc xây dựng trong phụ tùng dijit.form.ComboBox
    này có chức năng rất giống nhau, nhưng tôi đã chỉ nhìn thấy nó được sử dụng với các bộ dữ liệu hạn chế. Các ví dụ luôn sử dụng các danh sách nhỏ (chẳng hạn như 50 tiểu bang ở Hoa Kỳ) và tải trước toàn bộ tập dữ liệu để lọc phía máy khách. Tuy nhiên tôi đoán tôi có thể móc nó lên đến một dojox.data.JsonQueryRestStore cho tìm kiếm phía máy chủ - bất cứ ai có thể xác nhận cho dù đó hoạt động?

  • QueryBox http://marumushi.com/code/querybox/
    thi này chủ yếu làm công việc, nhưng nó có một số lỗi nhỏ và không giống như nó đang được duy trì. Tôi phải làm một số sửa lỗi trên mã trước khi sử dụng nó.

  • Medryx http://blog.medryx.org/2008/09/10/dijitsearch-part-2/
    này cũng có vẻ như nó không được công việc, nhưng nó được mô tả dưới dạng mã 'alpha cấp' và liên kết đến mã dường như bị phá vỡ ...

Tôi có lẽ có thể làm một trong những công việc trên, nhưng tôi muốn biết nếu có bất kỳ lựa chọn thay thế tốt hơn ra khỏi đó.

+0

Xin chào! Tôi đang cố gắng làm như vậy và thấy bài đăng này. Bất kỳ cơ hội nào bạn đăng mã của bạn cho Dojo 1.5/6? – Ayyoudy

Trả lời

11

tôi thực hiện nó 5 năm trước, khi Dojo là ở 0.2:

Mặc dù mã là cổ xưa, nó là tầm thường, và hy vọng nó sẽ cung cấp cho bạn ý tưởng về cách tấn công nó. Bản phác thảo thô:

  • Đính kèm trình xử lý sự kiện vào hộp nhập liệu, được kích hoạt khi thay đổi — sử dụng "onkeyup" để phát hiện thay đổi trong hộp nhập.
  • Đợi cho đến khi người dùng ngừng nhập bằng cách đặt bộ hẹn giờ trong trình xử lý sự kiện của bạn, nếu nó chưa được đặt. 200-500ms là thời gian chờ đợi tốt.
    • Thời gian chờ đóng một vai trò kép:
      • Nó throttles yêu cầu của chúng tôi đến một máy chủ để ngăn chặn quá tải.
      • Nó dựa trên nhận thức về thời gian và thói quen gõ của chúng tôi.
  • Nếu thời gian chờ của chúng tôi đang gia tăng, và chúng tôi không chờ đợi cho một máy chủ ⇒ gửi máy chủ một chuỗi chúng ta có cho đến nay.
  • Nếu chúng tôi vẫn đang chờ máy chủ, hãy hủy yêu cầu và hỏi lại.
    • Phần này dành riêng cho ứng dụng: chúng tôi không muốn quá tải máy chủ và đôi khi máy chủ không thể xử lý tốt các kết nối bị hỏng.
    • Trong ví dụ này, tôi không hủy cuộc gọi XHR, nhưng hãy đợi để hoàn tất trước khi gửi yêu cầu mới.
  • Máy chủ phản hồi với các kết quả có liên quan, được hiển thị kịp thời.

Trong bài đăng trên blog, tôi đã triển khai nó làm tiện ích. Rõ ràng là bao bì chính xác là tùy thuộc vào bạn.

+0

Cảm ơn! Giải pháp của bạn là đáng kể gần với những gì tôi đang tìm kiếm. Tôi hiện đang viết một kịch bản cập nhật cho Dojo 1.5 và có thể sẽ đăng nó ở đây khi tôi đã hoàn thành. – gutch

+0

Làm ơn. Đây là một đoạn mã hữu ích mà tôi có thể sử dụng. ;-) –

+0

Tôi biết đây là một bài đăng cũ. bạn có thể vui lòng chia sẻ mã mới nhất không? Tôi hiện đang làm việc trên cùng một tính năng sử dụng dojo. Cảm kích điều đó. –

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