我正在使用Yii2的高级模板。只要为select2'占位符'分配了值,窗口小部件就不会显示初始值。我可以通过使用['placeholder' => $placeholder]
并在存在初始值时将变量设置为NULL来解决此问题。但是,如果占位符为NULL并且显示初始值,则allowClear不起作用。我做错了什么?
查看:
use kartik\select2\Select2;
<?= $form->field($profile, 'associationSelect')->widget(Select2::classname(), [
'data' => $associationList,
'language' => 'en',
'theme' => 'krajee',
'options' => ['placeholder' => 'Select Association ...'],
'pluginOptions' => ['allowClear' => true],
])->label(''); ?>
控制器:
$associationArray = Association::find()
->select('association, id')
->indexBy('id')
->orderBy('association')
->all();
$associationList = ArrayHelper::map($associationArray, 'id', 'association');
$ associationList是一个数组,如{[1] =&gt;“association1”,[2] =&gt;“association2,[3] ...”}。
控制器使用密钥预先填充$profile->associationSelect
。我的问题是,小部件总是显示“选择关联...”,无论是否填充$profile->associationSelect
。我只希望占位符显示$associationSelect
是否为空,因为占位符应该如何工作。如果我将占位符留空(NULL),则清除选项(“x”)显示在窗口小部件中,但不会清除文本(即,单击时它不会执行任何操作)。
答案 0 :(得分:2)
我要么没有完全理解你的问题,要么我认为只用了一些改动就解决了你的问题。我在这里放了几个不同的东西,所以你可能不需要它们中的一些。
/*
* $profile->associationSelect: data list and assigned default value by key: 2 (third element).
* With this line, your select2 will have a default chosen value from data list.
* Remove this (1) line to show placeholder instead.
*/
if (!empty($associationList)) {
$form->associationSelect = 2;
echo $form->field($profile, 'associationSelect')->widget(Select2::classname(), [
'data' => $associationList,
'language' => 'en',
'theme' => 'krajee',
'options' => [
'placeholder' => $associationList[3] // Placeholder will show 4th element from data list (we do have a list)
],
'pluginOptions' => [
'allowClear' => true
],
]);
} else {
echo $form->field($profile, 'associationSelect')->widget(Select2::classname(), [
'data' => $associationList,
'language' => 'en',
'theme' => 'krajee',
'options' => [
'placeholder' => 'Please select a value' // Placeholder will be default text since we don't have a list.
],
'pluginOptions' => [
'allowClear' => true
],
]);
}
您可以选择所需的选项(无论是使用默认选择值还是仅使用占位符)。在这两种情况下,您都可以使用allowClear
并且不会出现任何错误(如果正确完成的话)。
答案 1 :(得分:1)
问题在于&#39; associationSelect&#39;是内部属性而不是db属性。我切换到db属性,它工作得很好。
<?= $form->field($profile, 'association')->widget(Select2::classname(), [
'data' => ArrayHelper::map(Association::find()->orderBy('id')->all(), 'id', 'association'),
'language' => 'en',
'theme' => 'krajee',
'options' => ['placeholder' => 'Select ...',],
'pluginOptions' => ['allowClear' => true],
])->label(''); ?>