【发布时间】:2015-06-12 05:07:16
【问题描述】:
我希望能够使用 typeahead 从 Bloodhound 进行远程数据调用,以使用 codeigniter 进行建模。
【问题讨论】:
标签: ajax codeigniter typeahead.js
我希望能够使用 typeahead 从 Bloodhound 进行远程数据调用,以使用 codeigniter 进行建模。
【问题讨论】:
标签: ajax codeigniter typeahead.js
所以我在尝试让 typeahead (twitter) 远程数据和 codeigniter 一起工作时有点挣扎,我找不到适合我需要的好例子。几个小时后,我想出了以下代码,希望对您有所帮助。
观点:
var proyectos = new Bloodhound({
datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.proyecto_titulo); },
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: 'proyectos/proyectos/getProyectos?query=%QUERY',
wildcard: '%QUERY'
}
});
$('#titulo').typeahead({
hint: true,
highlight: true,
minLength: 3
},
{
name: 'proyectos',
displayKey: 'proyecto_titulo',
source: proyectos.ttAdapter(),
templates: {
empty: [
'<div class="empty-message">',
'No se encontraron registros que coincidan con la búsqueda.',
'</div>'
].join('\n'),
suggestion: Handlebars.compile('<p>{{proyecto_titulo}} – <strong>{{tipo_proyecto_nombre}}</strong> </p>')
}
});
这里的相关部分是:
远程:{ url: 'proyectos/proyectos/getProyectos?query=%QUERY', 通配符:'%QUERY' }
其中 proyectos/proyectos 是控制器路径,getProyectos 是响应请求的方法。
每当您键入时,根据 minLength 设置,将在后端请求匹配的字符串。
注意:要使用 templates 设置中的 suggestion 部分,您必须下载 handlebars.js 库。
控制者:
public function getProyectos() {
$consulta = $this->input->get('query');
$proyectos = $this->proyectos_model->getProyectos($consulta);
if($proyectos->num_rows() > 0){
echo json_encode($proyectos->result());
}
else{
echo '';
}
}
我们首先使用 $this->input->get('query') 从视图中获取查询字符串,然后将其传递给我们的模型。
模特:
public function getProyectos($consulta) {
$query = $this->db->query
("select pro.proyecto_id
,pro.proyecto_titulo
,tip.tipo_proyecto_nombre
,tip.tipo_proyecto_id
from proyectos pro
inner join tipos_proyectos tip on tip.tipo_proyecto_id = pro.tipo_proyecto_id
where pro.proyecto_titulo ilike '%" . $consulta . "%' ");
return $query;
}
在模型中,我们只需将查询字符串传递给我们的 sql select 语句,我们就完成了。我使用的数据库是postgresql。
希望对您有所帮助。
【讨论】: