Yii 助推器选择2 - 允许新值


Yii Booster Select2 - allow new values

我正在使用Yii Booster中的Select2作为下拉列表。我想允许用户输入自己的值,但我不知道如何输入。我认为,这没有配置。我想我可能会尝试像这里这样的东西 - Select2 下拉列表,但允许用户使用新值?但我不知道在从 php 表单渲染 select2 时如何添加此 JavaScript。谁能帮忙?谢谢

我认为您可以通过在小部件的选项中添加一个javascript函数作为选项,方法是在它前面加上"js:",例如:

$this->widget(
    'booster.widgets.TbSelect2',
    array(
        'asDropDownList' => false,
        'name' => 'clevertech',
        'options' => array(
            'tags' => array('clever', 'is', 'better', 'clevertech'),
            'placeholder' => 'type clever, or is, or just type!',
            'width' => '40%',
            'tokenSeparators' => array(',', ' ')
            'createSearchChoice' => 'js:function(term, data) {
             if ( $(data).filter( function() {
               return this.text.localeCompare(term)===0;
             }).length===0) {
               return {id:term, text:term};
             }',
           }
        )
    )
);

为了进一步调试,如果打开 TbSelect2.php可以看到它对这些选项的作用:

$options = !empty($this->options) ? CJavaScript::encode($this->options) : '';

如果你去CJavaScript::encode函数,你可以看到它确实如此:

if(is_string($value))
{
    if(strpos($value,'js:')===0 && $safe===false)
        return substr($value,3);
    else
        return "'".self::quote($value)."'";
}

注意:我已经打开了 CJavaScript::encode 的 Yii 1 而不是 2,但可能是相同的。