1

我的数据结构如下:

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

现在我有自动完成输入框,参与者可以在其中输入他们的名字,然后输入他们的姓氏。

现在我要做的是我有一个单独的结构来容纳名字,另一个来容纳姓氏。这也是因为 Bootstrap 的 Typeahead 需要一个“源”,所以我只放了 source: first_names。

所以基本上发生的事情是用户输入他名字的前几个字母,他们可以自动完成,然后他们选择姓氏的前几个字母,他们可以自动完成,如果他们的名字和姓氏匹配,那么我会自动完成表格的其余部分。(现在我假设没有重复的名称)。

我想知道我是否在做正确的事情,因为这似乎太过分了。它有效,但有更好的方法吗?

4

2 回答 2

0

所以我在查看 Underscore 时偶然发现了 Lodash。我解决了它:

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

和这种效果的东西。感谢大家。我以前用过下划线,但我忘记了。猜猜你真的需要每天编码来保留信息。

回复:重复命名我必须考虑一下。去年有 200 名参与者,幸好没有人同名。后端对“first_name”和“last_name”有唯一的约束。

于 2013-07-14T17:12:14.930 回答
0

您可以在搜索匹配项时重载 typeahead 的方法来执行您需要的操作,下面是一个基本代码示例。

因此,在您的情况下,如果名字是单个匹配项,您可以自动填写姓氏(如果您认为有道理,则表格的其余部分,我个人不这样做)

您也可以将全名用作单个输入字段并自动完成我猜。

    $('#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 回答