GAE アプリケーションで Tomas (http://www.devbridge.com/projects/autocomplete/jquery/) による Jquery 用の Ajax Autocomplete を使用しています。私は都市のキーと選択する都市名のリストがドロップダウンリストに表示される都市検索モジュールを持っています。オートコンプリート ライブラリの要求に応じて json レスポンスを返しています。ドロップダウンに都市のリストを表示することはできますが、ユーザーがリストからオプションを選択すると、特定の URL にリダイレクトされるようにしたいと考えています。また、json の結果のオプション パラメータであるデータ オブジェクトも返します。だから今、私が返すものは3つあります。
1. 'query': 'Ade'
2. 'suggestions': ['Adelaide', 'Adelaide Hills', 'Adelia Maria']
3. 'data': [{'Adelaide': '/Oceania/Australia/Adelaide'},{'Adelaide Hills':'/Oceania/Australia/Adelaide Hills'},{'Adelia Maria':'/Oceania/Australia/Adelia Maria'}]
jsonの結果を送信するコードは次のとおりです。
class SearchCity(TemplateHandler):
def get(self):
results, data, url = [], [], ''
word = self.request.get('query')
search = models.City.all().filter('name >=', word.capitalize()).filter('name <', word.capitalize() + u'\ufffd')
for res in search:
url = '/' + res.country.continent.name + '/' + res.country.url_name + '/' + res.name + '/'
results.append(res.name)
data.append({res.name:url})
json_results = {
'query' : word,
'suggestions' : results,
'data': data
}
self.response.out.write(json.dumps(json_results))
オートコンプリート機能をトリガーしようとしている Javascript は次のとおりです。
<script type="text/javascript">
//<![CDATA[
var a = $('#search-city').autocomplete({
serviceUrl:'/search_city',
delimiter: /(,|;)\s*/, // regex or character
maxHeight:140,
width:170,
zIndex: 9999,
deferRequestBy: 0, //miliseconds
noCache: false, //default is false, set to true to disable caching
});
//]]>
</script>
プラグインの作成者によると、コールバック関数に次のようなものを使用できます。
// callback function:
onSelect: function(value, data){ alert('You selected: ' + value + ', ' + data); },
質問:
1.) ユーザーが選択したキーを持つ辞書の url の値にアクセスし、ユーザーをその url にリダイレクトするにはどうすればよいですか?
2.) 「データ」オブジェクトに URL のリストを渡すだけで、正しい名前を正しい URL にリンクできますか?
3.) また、提案リストに結果がない場合に「一致が見つかりませんでした」と表示する方法はありますか?