Yii2 kartik-v select2小部件allowClear和占位符无法正常工作

时间:2016-08-02 20:43:09

标签: php yii2

我正在使用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”)显示在窗口小部件中,但不会清除文本(即,单击时它不会执行任何操作)。

2 个答案:

答案 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(''); ?>