Yii2 使用select2 组件实现下拉搜索
刚开始使用yii,需要实现下拉多选搜索,就找到了select2这个组件,先看看实现后的效果:
如何安装select2网上有很详细的教程,这里不做赘述。
完成后只需要在视图文件use kartikselect2Select2就可以了。
具体的视图中的代码如下:
<?=
$form->field($model, "search")->widget(Select2::classname(), [
"options" => ["placeholder" => "请输入用户ID ..."],
"pluginOptions" => [
"id" => new JsExpression("function(rs) {
return rs.taskId;
}"),
"placeholder" => "search ...",
"multiple" => true,
"allowClear" => true,
"language" => [
"errorLoading" => new JsExpression("function () { return "Waiting..."; }"),
],
"ajax" => [
"url" => Url::to(["gm-account-info/search-title"]),
"dataType" => "json",
"data" => new JsExpression("function(params) {
return {q:params.term}; }")
],
"escapeMarkup" => new JsExpression("function (markup) {
return markup; }"),
"templateResult" => new JsExpression("function(res) {
return res.text; }"),
"templateSelection" => new JsExpression("function (res) {
return res.text; }"),
],
]);
?>
控制器中代码如下:
$out = ["results" => ["userid" => "", "text" => ""]];
if (!$q) {
echo json_encode($out);die;
}
$data = GmAccountInfo::find()
->select("uid as userid, account_name as text")
->andFilterWhere(["like", "uid", $q])
->asArray()
->all();
$out["results"] = array_values($data);
echo json_encode($out);die;
这样出来的结果是这样的:
搜索结果是下拉显示出来了,但是无法选中。
最后将控制器中的代码做了一点修改:
$out = ["results" => ["id" => "", "text" => ""]];
if (!$q) {
echo json_encode($out);die;
}
$data = GmAccountInfo::find()
->select("uid as id, uid as text") //userid=>id
->andFilterWhere(["like", "uid", $q])
->asArray()
->all();
$out["results"] = array_values($data);
echo json_encode($out);die;
将返回数据的格式调整为[‘id’=>”,’text’=>],就正常了。
结论:使用select2 组件时,后端返回的数据格式必须是[‘id’=>”,’text’=>]这个格式的。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: php 接口出现跨域问题
- 下一篇:没有了