#autocomplete #yii2
#автозаполнение #yii2
Вопрос:
Я пытаюсь переключиться на Yii2 из Yii 1.1. Это был исходный атрибут виджета TextAreaJuiAutoComplete
'source'=>"js:function(request, response) {
$.getJSON('".$url"', {
term: extractLast(request.term)
}, response);
}",
Это больше не работает в Yii2 с yii jui AutoComplete. Кто-нибудь может дать мне подсказку, в чем причина? Базовые объекты JavaScript должны быть одинаковыми.
Если я введу следующий код, это сработает, но я хочу использовать вызовы ajax вместо этого.
'source' => [ "c ", "java", "php", "coldfusion", "javascript", "asp", "ruby" ],
Комментарии:
1. Пожалуйста, проверьте ваш javascript с помощью firebug и увидите ошибку
2. Ошибки нет, просто ничего не происходит.
Ответ №1:
Попробуйте это:
use yiiwebJsExpression;
.....
.....
'source'=>new JsExpression("function(request, response) {
$.getJSON('".$url."', {
term: request.term
}, response);
}"),
Ответ №2:
Попробуйте это:
AutoComplete::widget([
'name'=>'myacfield',
'clientOptions' => [
'source' => Url::to(['autocomplete']),
'minLength'=>'2',
],
'options'=>[
'class' => 'form-control'
]
]);
Но ваше AutoComplete
действие должно возвращать одномерный массив, подобный
...
$rs = Yii::$app->db->createCommand($sql)->queryAll();
$row_set = [];
foreach ($rs as $row)
{
$row_set[] = $row['name']; //build an array
}
echo json_encode($row_set); //format the array into json data
Ответ №3:
Пример с подобным. Контроллер:
public function actionSearch($term)
{
Yii::$app->response->format = yiiwebResponse::FORMAT_JSON;
$rs = Cure::find()->where(['like', 'name_uz', $term])->all();
if($rs !=null){
$row_set = [];
foreach ($rs as $row)
{
$row_set[] = $row->name_uz; //build an array
}
return $row_set;
}else{
false;
}
}
В поле зрения:
<? use yiijuiAutoComplete;?>
<?= AutoComplete::widget([
'model' => $model,
'attribute' => 'country',
'options' => ['class' => 'form-control'],
'clientOptions' => [
'source' => Url::to(['cure/search']),
'minLength'=>'2',
],
]); ?>