我认为您可以在小部件的选项中添加一个 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)."'";
}
注意:我打开的是 Yii 1 而不是 2 的 CJavaScript::encode,但可能是一样的。