DelayedObserver

とあるやりとりで、Rubricksインクリメンタルサーチのライブラリはないのか、という話がありました。結論としては、ないのです。サブプロジェクトのspinelzにもありません。
しかし、script.aculo.usのライブラリを使えば普通にできる(はず)です。
あまり情報がないようなので書いておきます。

aculo.usのライブラリにForm.Element.DelayedObserverというのがあります。(control.jsに入っているはず)

そもそもprototype.jsにForm.Element.Observerというのがあって、任意のフォーム要素を監視して、要素に変更があった場合に実行するコールバックを指定できます。DelayedObserverはその名の通り、それの遅延時間を指定できるようにしたものです。
こんな↓感じで、テキストが変更されてから2秒後にアラートを出すことができます。

<input id='target_field' type='text' />

これのalertしてるところでprototypeの機能でnew Ajax.Updater(...)な感じに書けばインクリメンタルサーチになると思います。

以下、くどいかもしれませんが。
なぜ、Delayedにしなきゃいけないの?という疑問が沸く方もいるかもしれません。


回答としては、Delayedにしないと全ての変更通知毎にAjax発行され、すさまじい回数のAjaxが発行されるからです。
「yamada」と入力すると「y」「ya」「yam」「yama」「yamad」「yamada」というAjaxが飛んで全て検索結果に表示されます。
これではネットワークやサーバの負荷も増えますし、何よりチラチラして使いづらいです。

Delayedではディレイ待ち時間中に入力があるとコールバックがキャンセルされて、新たにそこからディレイ待ち時間がカウントされ始めます。
結果、「yamada」だけがAjax発行されるようになるのです。

(Shouta)