1

我对 CI 和 Typeahead 有一些问题,我没有得到任何结果;/

JS

var countries = new Bloodhound({
  datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.name); },
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  limit: 10,
  prefetch: {
    url: base_url + 'home/search?q=%QUERY',
    filter: function(list) {
      return $.map(list, function(country) { return { name: country }; });
    }
  }
});

countries.initialize();

$('.typeahead').typeahead(null, {
  name: 'countries',
  displayKey: 'name',
  source: countries.ttAdapter()
});

CI 控制器

public function search(){
    $query = $this->home_model->getData();
    echo json_encode($query);
}

CI模型

private $_cityTable = 'city';

public function getData(){
    $city = $this->input->get('q');
    $query = $this->db->select('city_name')->like('city_name', $city, 'after')->get($this->_cityTable);
    foreach ($query->result_array as $key) {
        $array[] = $key['city_name'];
    }
    return $array;
}

并查看

<input type="text" class="typeahead">

有人可以帮我解决这个问题吗?

4

1 回答 1

0

在调试这个例子的时候,我发现传入filter函数的parsedResponse对象有如下结构:

parsedResponse ={page: x, results:[], total_pages:x, total_results: x};

其中“x”是一个整数。

因此,要让您的代码正常工作,请更改您的过滤器函数,以便您遍历列表对象内的结果数组,即

filter: function(list) {
 return $.map(list.results, function(country) { return { name: country }; });
}
于 2014-02-11T00:24:33.317 回答