1

私のデータは次のように構成されています。

participants['John Smith'] = {first_name: 'John', last_name: 'Smith', id: '1'}

これで、参加者が名と姓を入力するだけで入力できるオートコンプリート入力ボックスができました。

今私がしていることは、ファースト ネームを格納するための別の構造と、ラスト ネームを格納するための別の構造を持つことです。これは、Bootstrap の Typeahead が「ソース」を必要とするためでもあるため、source: first_names と入力しました。

基本的に何が起こるかというと、ユーザーが自分の名前の最初の数文字を入力するとオートコンプリートが可能になり、姓の最初の数文字を選択するとオートコンプリートが可能になり、姓と名が一致する場合はフォームの残りをオートコンプリートします。(今のところ、重複した名前はないと仮定しています)。

あまりにも行き過ぎているように見えるので、私は正しいことをしているのだろうかと思っていました。それはうまくいきますが、より良い方法はありますか?

4

2 に答える 2

0

タイプアヘッドのメソッドをオーバーロードして、一致を検索するときに必要なことを行うことができます。以下は基本的なコード例です。

したがって、あなたの場合、名が単一の一致である場合、姓をオートコンプリートできます(それが理にかなっていると思う場合は、フォームの残りの部分、私は個人的にはしません)

フルネームを単一の入力フィールドとして使用し、両方をオートコンプリートすることもできます。

    $('#searchBox').typeahead(
    {
        source: function (query, process) {  
            process(theArrayToProcess);
        },
        updater: function (item) {
            callAFunctionToDoSomethingWithMatchedItem(item);
            return item;
        },
        matcher: function (item) {
         if (item.toLowerCase().indexOf(this.query.trim().toLowerCase()) != -1) {
                return true;
         }
        },
        sorter: function (items) {
            return items.sort();
        },
        highlighter: function (item) {
            var regex = new RegExp( '(' + this.query + ')', 'gi' );
            return item.replace( regex, "<strong>$1</strong>" );
        },
    });
于 2013-07-14T08:27:10.253 に答える
0

そこで、Underscore を調べていて、偶然 Lodash にたどり着きました。私はそれを解決しました:

_.uniq(_.pluck(stuff.participants, 'first_name'))
_.uniq(_.pluck(stuff.participants, 'last_name'))

そしてその趣旨のもの。みんな、ありがとう。以前はアンダースコアを使用していましたが、忘れていました。情報を保持するには、毎日コーディングする必要があると思います。

Re: ネーミングが重複しています 考えないといけません。昨年は 200 名の参加者がありましたが、同じ名前の人がいなくてよかったです。バックエンドには、'first_name' と 'last_name' に固有の制約があります。

于 2013-07-14T17:12:14.930 に答える