AutoComplete Control: Basic Local Data
AutoCompeteとは、画面への入力中に、その候補を(次々と)自動的に拾って表示する機能のこと。
このようなsuggestionをしてくれるアプリケーションが多くなった。
YUIのAutoCompleteのTOPページを見ると、この入力補完機能のためのデータの供給はYAHOO.util.DataSourceと書いてある。
DataTableのサンプルで散々使ったオブジェクト。うまくDAOとして機能して、リソースが「どこにあるか」を殆ど感じさせないインターフェイスとの印象がある(つまり、この部分はDataSourceのサンプルが参考になるということだ)。
このExampleでは、HTMLと同一のサーバー内にあるデータ(Local Dataと呼んでいる。JavascriptのArray)を読み込んで、リストボックスを使った以下のような入力補助を行う。
以下にソースコードを示すが、DataTableの作成と非常によく似ていることに驚く。
YUIのExampleでは、LocalDataSourceオブジェクトを使用しているが、(DataTableのところで使わなかったので)普通のDataSourceオブジェクトで読みこむように変更した。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>Ajax Sample</title> <style type="text/css"> body { margin:0; padding:0; } </style> <link rel="stylesheet" type="text/css" href="scripts/yui/fonts/fonts-min.css" /> <link rel="stylesheet" type="text/css" href="scripts/yui/autocomplete/assets/skins/sam/autocomplete.css" /> <script type="text/javascript" src="scripts/yui/yahoo-dom-event/yahoo-dom-event.js"></script> <script type="text/javascript" src="scripts/yui/animation/animation-min.js"></script> <script type="text/javascript" src="scripts/yui/datasource/datasource-min.js"></script> <script type="text/javascript" src="scripts/yui/autocomplete/autocomplete-min.js"></script> <style type="text/css" id="defaultstyle"> #main { margin: 2px; padding: 3px; } #myAutoComplete { width:15em; /* set width here or else widget will expand to fit its container */ padding-bottom:2em; } </style> <script type="text/javascript" src="scripts/yui/autocomplete/assets/js/data.js"></script> <script type="text/javascript"> YAHOO.util.Event.addListener(window, "load", function() { YAHOO.example.BasicLocal = function() { // DataSourceの作成。 var oDS = new YAHOO.util.DataSource(YAHOO.example.Data.arrayStates); oDS.responseType = YAHOO.util.DataSource.TYPE_JSARRAY; oDS.responseSchema = { fields : ["state"] }; // AutoCompleteインスタンスの生成 var oAC = new YAHOO.widget.AutoComplete("myInput", "myContainer", oDS); // Default oAC.prehighlightClassName = "yui-ac-prehighlight"; // リストボックスに影がつく oAC.useShadow = true; return { oDS: oDS, oAC: oAC }; }(); }); </script> </head> <body class=" yui-skin-sam"> <div id="main"> <p>AutoCompleteのサンプルです。<br/> Httpサーバーにあるjsファイルから、データを取得します。</p> <div id="myAutoComplete"> <input id="myInput" type="text"> <div id="myContainer"></div> </div> </div> </body> </html>