将 Select2 选项显示为已选择
Posted
技术标签:
【中文标题】将 Select2 选项显示为已选择【英文标题】:Show Select2 option as selected 【发布时间】:2018-07-11 17:35:06 【问题描述】: <?=
$form->field($model, 'contributors')->widget(Select2::classname(), [
'initValueText' => '',
'options' => ['placeholder' => 'Search for a Contributor ...'],
'pluginOptions' => [
'allowClear' => true,
'minimumInputLength' => 3,
'ajax' => [
'url' => \yii\helpers\Url::to(['data2']),
'dataType' => 'json',
'data' => new JsExpression('function(params) return q:params.term; ')
],
'escapeMarkup' => new JsExpression('function (markup) return markup; '),
'templateResult' => new JsExpression('function(contributor_id) return contributor_id.text; '),
'templateSelection' => new JsExpression('function (contributor_id) return contributor_id.text; '),
],
])->label('Contributors');
?>
如何显示选定的值,现在它显示 id 为选定的。 请任何人帮助我。
【问题讨论】:
【参考方案1】:更新
抱歉,回复晚了没有注意到您需要为 select2 设置初始文本,因为您正在使用 ajax 选项,因此您应该使用选项initValueText
。根据文档
initValueText
: 在 Select2 小部件中显示的文本 初始值。这在您使用 带有 ajax 加载数据的小部件和/或您没有提供数据。 查看 ajax 使用部分以获取示例。
所以你需要像下面这样使用它,在你的控制器动作中添加这一行并将它传递给视图,或者在 select2
之前添加它到视图中
$contributorName = empty($model->contributors) ? '' : Contributors::findOne($model->contributors)->name;
<?=
$form->field($model, 'contributors')->widget(Select2::classname(), [
'initValueText' => $contributorName, // set the initial display text
'options' => ['placeholder' => 'Search for a Contributor ...'],
'data'=>yii\helpers\ArrayHelper::map(Contributors::find()->all(),'id','name')
'pluginOptions' => [
'allowClear' => true,
'minimumInputLength' => 3,
'ajax' => [
'url' => \yii\helpers\Url::to(['data2']),
'dataType' => 'json',
'data' => new JsExpression('function(params) return q:params.term; ')
],
'escapeMarkup' => new JsExpression('function (markup) return markup; '),
'templateResult' => new JsExpression('function(contributor_id) return contributor_id.text; '),
'templateSelection' => new JsExpression('function (contributor_id) return contributor_id.text; '),
],
])->label('Contributors');
?>
您需要为将显示所选值的值集提供数据选项您希望显示text
而不是id
,请以数组形式提供data
选项与key=>value
对。
查看您的代码,您希望在数据库表中针对id
显示贡献者name
,因此您应该使用ArrayHelper:map()
以及查询您的Contributors
模型,请参见下文并更新您的字段名称为@ 987654335@ArrayHelper::map()
内的模型/表
<?=
$form->field($model, 'contributors')->widget(Select2::classname(), [
'options' => ['placeholder' => 'Search for a Contributor ...'],
'data'=>yii\helpers\ArrayHelper::map(Contributors::find()->all(),'id','name')
'pluginOptions' => [
'allowClear' => true,
'minimumInputLength' => 3,
'ajax' => [
'url' => \yii\helpers\Url::to(['data2']),
'dataType' => 'json',
'data' => new JsExpression('function(params) return q:params.term; ')
],
'escapeMarkup' => new JsExpression('function (markup) return markup; '),
'templateResult' => new JsExpression('function(contributor_id) return contributor_id.text; '),
'templateSelection' => new JsExpression('function (contributor_id) return contributor_id.text; '),
],
])->label('Contributors');
?>
【讨论】:
感谢您的宝贵回复,但为什么我在使用 ajax 作为贡献者时使用数据并在用户输入时附加到其中。顺便说一句,我尝试过这个解决方案但没有用。 它在您的情况下不起作用,因为您在pluginOptions
内提供了 data
,它覆盖了在小部件级别设置的 data
@Nageen
你也应该使用processResults
抱歉@Nageen 没有注意到,更新了我的回答希望对您有帮助以上是关于将 Select2 选项显示为已选择的主要内容,如果未能解决你的问题,请参考以下文章
Select2 4.0.0 AJAX - 使用 Tab 选择突出显示的选项