2

私は Twitter の typeahead.js を使用して名前のリストを検索していますが、クライアントは名前に基づいて提案を求めています。

文字列内のどこかではなく、各結果の先頭で Twitter typeahead.js を検索クエリに一致させるオプションはありますか?

beginsWithQuery関数内の変数を確認できますが、_updateHintこれをオプションとして指定する方法がわかりません。また、これが達成しようとしていることに関連している場合でもわかりません。

私のプロジェクトで typeahead を呼び出している jQuery 関数は次のとおりです。

$( 'input[name="s"]' )
  .typeahead( {
      name: 'search',
      remote: wp_typeahead.ajaxurl + '?action=ajax_search&fn=get_ajax_search&terms=%QUERY',
      template: [
        '<p><a href="{{url}}">{{value}}</a></p>',
    ].join(''),
      engine: Hogan
  } )
);

ajax_searchからの応答が次の形式であることがわかります

[
  { "tokens" : [ "First","Last" ],
    "url" : "http://url/for/first-last/",
    "value" : "First Last" },
]

token[0]そのため、この JSON をフィルター処理して、検索クエリに一致するデータのみを含める方法を理解する必要があります。

prefetch編集:以下の @jharding の anwser に従って、ソリューションを実装するために追加しなければならなかったことに関する追加のメモ。

これは WordPress サイトで、サイトが検索する名前は「モデル」のカスタム投稿タイプのタイトルです。必要なデータ形式でモデル名の配列を出力する list-all-models.php というファイルを作成しました。

<?php
define('WP_USE_THEMES', false);
require('../../../../wp-load.php'); // depends on where this file is

$args = array (
    'post_type' => 'model',
    'orderby' => 'title',           
    'order' => 'asc',
    'posts_per_page' => -1
);

$models = get_posts($args);

$model_names = array();

foreach ($models as $i => $model) {
    $model_names[$i]['value']   = $model->post_title;
    $model_names[$i]['url']     = $model->guid;
    $model_names[$i]['tokens']  = explode(' ', $model->post_title);
}

header("Content-type: application/json");
die(json_encode($model_names));
?>

次に、このファイルの URL をprefetchオプションの url パラメーターとして使用しました。

これで、検索は意図したとおりに機能します:)

4

2 に答える 2

0

適切な解決策は次のとおりです。

 matcher: function (item) {
                        if (item.toLowerCase().indexOf(this.query.trim().toLowerCase()) == 0) {
                            return true;
                        }
于 2013-09-13T11:58:03.373 に答える