У меня вопрос о yii2 kartik-v widget select 2.
виджет прикреплен к полю в моем представлении
<?= $form->field($model, 'address')->widget(Select2::className(), [ 'options' => ['placeholder' => 'Inserta an address '], 'pluginOptions' => [ 'allowClear' => true, 'minimumInputLength' => 3, 'ajax' => [ 'url' => Url::to(['register/addresses']), 'dataType' => 'json', 'data' => new JsExpression('function(params) { return {q:params.term}; }') ], 'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 'templateResult' => new JsExpression('function(address) { return address.name; }'), 'templateSelection' => new JsExpression('function (address) { return address.name; }'), ], 'pluginEvents' => [ "select2:select" => "function(e) { // some function }", ], ]); ?>
если в моем контроллере я хочу установить в это поле значение
например: $model->address = "Some Value";
на вид поле остается пустым
Что я могу сделать?
ОБНОВИТЬ!
Как говорится в документации, я могу использовать опцию: initValueText, если я использую версию этого плагина ajax. Поэтому я попытался установить 'initValueText' => $model->address,
но результат тот же
Его немного поздно .. но у меня тоже была такая же проблема .. я решил это, назначив ценность
<?= $form->field($model, 'address')->widget(Select2::className(), [ 'initValueText' => $model->address, 'value' => $model->address, 'options' => ['placeholder' => 'Inserta an address '], 'pluginOptions' => [ 'allowClear' => true, 'minimumInputLength' => 3, 'ajax' => [ 'url' => Url::to(['register/addresses']), 'dataType' => 'json', 'data' => new JsExpression('function(params) { return {q:params.term}; }') ], 'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 'templateResult' => new JsExpression('function(address) { return address.name; }'), 'templateSelection' => new JsExpression('function (address) { return address.name; }'), ], 'pluginEvents' => [ "select2:select" => "function(e) { // some function }", ], ]); ?>
эй, у меня была такая же проблема с #ajax, ни placeholder, ни initValueText не показывали, что я сделал это
<?php $product = $model->product_id ? Product::findOne($model->product_id)->name : 'select ....'; echo $form->field($model, 'product_id')->widget(Select2::classname(), [ 'initValueText' => $product, // set the initial display text // 'options' => ['placeholder' => 'select ....'], 'pluginOptions' => [ 'allowClear' => true, 'minimumInputLength' => 3, 'ajax' => [ 'url' => Url::to(['list']), 'dataType' => 'json', 'data' => new JsExpression('function(params) { return {q:params.term}; }') ], 'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 'templateResult' => new JsExpression('function(product_id) { return product_id.name; }'), 'templateSelection' => new JsExpression('function (product_id) { return product_id.name; }'), ], ]);?>
если новая модель «select ….» отображается иначе имя продукта, так как «параметры» не слишком много надеются, что это будет надеяться кому-то
Проблема заключалась в следующем:
'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 'templateResult' => new JsExpression('function(address) { return address.name; }'), 'templateSelection' => new JsExpression('function (address) { return address.name; }'),
Похоже, что этот плагин хочет получить конкретный возврат для шаблонов templateResult 'и' templateSelection '.
Я изменил возвращаемое значение JsExpression с адресом address.text (вместо address.name) в качестве примеров: Link .
И затем я изменил также метод PHP, который возвращает результаты:
public function actionAddresses($q = NULL, $id = NULL) { Yii::$app->response->format = Response::FORMAT_JSON; $results = array(); if (!is_null($q)) { $geocoder = new GeocodingClient(); $request = $geocoder->lookup(['address' => $q]); $counter = 1; foreach ($request['results'] as $key => $value) { $results['results'][] = [ 'id' => $counter, 'text' => $value['formatted_address'], // Instead of 'name' 'coordinate' => $value['geometry']['location'] ]; $counter++; } } return $results; }
Надеюсь, это поможет кому-то с подобной проблемой.