Yii2: Картик DetailView и Select2 загружают не текстовый идентификатор

Итак, я загружаю виджет 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'),

person Antonio López    schedule 07.03.2017    source источник
comment
Очень полезный вопрос! Я также получил тот же результат: 'initValueText' => ArrayHelper::map(Model::find()->all(), 'id', 'name')   -  person Luca Antonelli    schedule 31.01.2019


Ответы (1)


Вам нужно установить Select2::initValueText при использовании Select2 с ajax, чтобы отображалось отображаемое имя вместо идентификатора. Для множественного выбора это необходимо настроить как массив.

person Kartik V    schedule 07.03.2017
comment
Спасибо большое Картик. Только что добавил: 'initValueText' => ArrayHelper::getColumn($model->characters, 'name') - person Antonio López; 07.03.2017