Yii2:Kartik 的 DetailView 和 Select2 加载 id 不是文本
Yii2: Kartik's DetailView and Select2 loading id's not text
所以我正在使用多个输入在 Kartik 的 DetailView 中加载 Kartik 的 Select2 小部件:
[
'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; }"),
],
],
],
当谈到 Kartik 的 DetailView 时,VIEW 模式正确地显示了 value
给出的我的字符列表,但是当进入 EDIT 模式时,我得到了这个:
这显然不是我所期望的:我想要我的角色的名字而不是他们的 ID。但是,如果我从这个完全相同的输入下拉列表中 select 新字符,则会添加新标签以正确显示新名称(因此更新数据时会发生此问题)。在我确认新数据后尝试更新,新角色又显示了他们的ID。
JSON数据如下:
{"results":[{"id":"8","text":"Character8"},{"id":"5","text":"Character5"}],"pagination":{"more":true}}
有什么想法吗?
更新了以下 KARTIK 的解决方案:
添加 initValueText
作为所需属性值的数组:
'initValueText' => ArrayHelper::getColumn($model->characters, 'name'),
使用 Select2 和 ajax 时需要设置 Select2::initValueText
以显示显示的名称而不是 id。对于多个 select 这需要设置为数组。
所以我正在使用多个输入在 Kartik 的 DetailView 中加载 Kartik 的 Select2 小部件:
[
'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; }"),
],
],
],
当谈到 Kartik 的 DetailView 时,VIEW 模式正确地显示了 value
给出的我的字符列表,但是当进入 EDIT 模式时,我得到了这个:
这显然不是我所期望的:我想要我的角色的名字而不是他们的 ID。但是,如果我从这个完全相同的输入下拉列表中 select 新字符,则会添加新标签以正确显示新名称(因此更新数据时会发生此问题)。在我确认新数据后尝试更新,新角色又显示了他们的ID。
JSON数据如下:
{"results":[{"id":"8","text":"Character8"},{"id":"5","text":"Character5"}],"pagination":{"more":true}}
有什么想法吗?
更新了以下 KARTIK 的解决方案:
添加 initValueText
作为所需属性值的数组:
'initValueText' => ArrayHelper::getColumn($model->characters, 'name'),
使用 Select2 和 ajax 时需要设置 Select2::initValueText
以显示显示的名称而不是 id。对于多个 select 这需要设置为数组。