0

问题一:

我有以下代码:

// NOTE: Initiate auto-complete
  $('#edit-keyword').typeahead({
    remote: '/products/autocomplete.json/%QUERY', 
    wildcard: '%QUERY'
  }).bind('typeahead:selected', function(object, datum) {
    console.log(object);
  });

我从服务器返回这个 JSON:

1: "Bustello Cafe Coffee Regular"
110: "Barista Prima Coffeehouse Coffee Pods K Cups Darkest Roast French Roast"
713: "Bolthouse Farms Protein Plus Coffee"
5680: "Bustello Cafe Coffee Regular"
5693: "Bustello Cafe Coffee Regular"

我在上面的代码片段中添加了什么来检索与每个项目关联的 ID...现在“基准”只返回字符串值。

问题2:

我刚刚注意到 JSON 返回多个具有唯一 ID 的“Bustello Cafe Coffee Regular”,但呈现的下拉列表似乎一次只显示一个 - 我假设在 typeahead 控件中存在抑制重复项?它在哪里???

亚历克斯

4

1 回答 1

0

如果需要,您可以使用typeahead:selectedtypeahead:autocompleted自定义事件来获取 ID与每个项目的关联,但您的 json 需要适当的ID属性.. 例如:

[{"ID":111, "Name":"blah"},{"ID":222, "Name":"buuu"}]

像这样使用 jquery 和 typeahead 的东西:

    $("#edit-keyword").on("typeahead:selected typeahead:autocompleted",
        function(e, datum) {
            // datum containts datum.ID here, do what you want with it
            //.. i.e. assign to a hidden input or knockout observable, etc.
        }
    );

至于您的重复问题,我还没有看到它的配置,如果它们还没有,typeahead 将尝试将您的数据转换为 typeahead 基准,因此它可能是_transformDatumtypeahead 中的功能。

我建议您尝试自己将数据构建为预先输入的数据以避免这种情况并看看会发生什么,请参阅https://github.com/twitter/typeahead.js#datum了解它们通常的结构,在您的情况下是值将是一个object,您需要指定适当的valueKey属性。

于 2013-10-23T13:53:04.933 回答