Autocompleterを読む

railsのauto_complete_fieldをカスタマイズしたくなったので、controls.jsを読んでみることにしました。

まずはざくっとオブジェクトを洗い出してみる

登場するオブジェクト

  • Autocompleter
  • Autocompleter.Base
  • Ajax.Autocompleter
  • Autocompleter.Local

Autocompleterは名前空間を確保するただのオブジェクト。それ以外はクラスだね。
Autocompleter.Baseの最初の方は

Autocompleter.Base = function() {};
Autocompleter.Base.prototype = {
  baseInitialize: function(element, update, options) {

って感じになってて、いろんなメソッドが定義されているので、これが基本なんでしょうね。

次、Ajax.Autocompleter。

Ajax.Autocompleter = Class.create();
Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {
  initialize: function(element, update, url, options) {
    this.baseInitialize(element, update, options);
    ・・・
  },

  getUpdatedChoices: function() {
    ・・・
  },

  onComplete: function(request) {
    this.updateChoices(request.responseText);
  }  

Ajax.Autocompleterは、Autocompleter.Baseを継承しています。


Autocompleter.Localは、

// The local array autocompleter. Used when you'd prefer to
// inject an array of autocompletion options into the page, rather
// than sending out Ajax queries, which can be quite slow sometimes.

とあるので、(遅い)Ajaxで候補を取得するんじゃなくてローカルなJSの配列で候補を扱いたい時に使うんだそうです。

というわけで、Autocompleter.Baseを理解すれば、ほとんどOKってことが分かりました。詳しいことはまた今度。