Итак, я загружаю виджет Kartik Select2 в DetailView Kartik, используя множественный ввод:
[
'attribute' => 'characters',
'format' => 'raw',
'type' => DetailView::INPUT_SELECT2,
'value' => function($form, $widget) {
<my_stuff_in_VIEW_mode>
},
'widgetOptions' => [
'options' => ['multiple' => true, 'placeholder' => Yii::t('app', 'Select...')],
'pluginOptions' => [
'allowClear' => true,
'minimumInputLength' => 3,
'maximumInputLength' => 20,
'language' => Yii::$app->language,
'ajax' => [
'url' => \yii\helpers\Url::to(['myAjaxServer']),
'dataType' => 'json',
'delay' => 250,
'data' => new JsExpression('function(params) { return {q:params.term, p:params.page}; }'),
'cache' => true,
],
'escapeMarkup' => new JsExpression("function (markup) { return markup; }"),
'templateResult' => new JsExpression("function (characters) { return '<b>' + characters.text + '</b>'; }"),
'templateSelection' => new JsExpression("function (characters) { return characters.text; }"),
],
],
],
Когда дело доходит до Картика DetailView, режим VIEW правильно показывает мой список символов, заданный value
, но при входе в режим EDIT я получил это:
что, очевидно, не то, что я ожидал: мне нужны имена моих персонажей, а не их идентификаторы. Однако, если я выбираю новые символы из этого самого раскрывающегося списка ввода, добавляются новые теги, которые правильно отображают новые имена (таким образом, эта проблема возникает при обновлении данных). После того, как я подтвержу новые данные, а затем попытаюсь обновить, новые персонажи снова отображаются с их идентификаторами.
Данные JSON следующие:
{"results":[{"id":"8","text":"Character8"},{"id":"5","text":"Character5"}],"pagination":{"more":true}}
Любые идеи?
ОБНОВЛЕНО РЕШЕНИЕМ КАРТИКА НИЖЕ:
Добавьте initValueText
в качестве массива желаемых значений атрибутов:
'initValueText' => ArrayHelper::getColumn($model->characters, 'name'),