yii2 Kartik-V Typeahead基本自动完成名称但存储整数值

时间:2015-09-18 05:47:22

标签: yii2 typeahead.js yii-extensions

已在下方进行了更新

我正在尝试将Kartik-V Typeahead Basic小部件与Yii2 Framework一起使用。

以下代码用于显示所需数据,用户可以通过大学名称进行搜索,并显示在自动填充列表中。

问题是,模型需要大学ID,而不是名称。因此规则是这个字段只能存储一个整数,并在您选择一个预先输出结果后返回验证错误。

<?= $form->field($model, 'university_id')->widget(TypeaheadBasic::classname(), [
    'data' => ArrayHelper::map(University::find()->all(),'id','uni_name'),
    'pluginOptions' => ['highlight' => true],
    'options' => ['placeholder' => 'Filter as you type ...'],
]); ?>

我希望有人可以帮助我了解是否有需要更改的设置,以便在保存时,用户友好&#39; uni_name&#39;数据会更改回uni&#39;。

更新: 感谢&#34; Insane Skull&#34;我已经让代码部分工作了。

新代码是:

<?= $form->field($model, 'name')->widget(TypeaheadBasic::classname(), [
    'data' => ArrayHelper::map(University::find()->all(),'id','uni_name'),
    'pluginOptions' => ['highlight' => true],
    'options' => ['placeholder' => 'Filter as you type ...', 'id' => 'testID'],
    'pluginEvents' => [
        'typeahead:select' => new yii\web\JsExpression("function(event, ui) { $('#testing123').val(ui.item.id); }"),
    ]
]); ?>

<?= Html::activeHiddenInput($model, 'university_id', array ('id' => 'testing123'))?>

现在我很遗憾收到错误: 方法yii \ web \ JsExpression :: __ toString()必须返回字符串值

2 个答案:

答案 0 :(得分:4)

我宁愿使用Select2而不是Typeahead,你基本上是在尝试实现Select2上已经存在但使用Typeahead的功能。

<?= $form->field($model, 'university_id')->widget(Select2::classname(), [
    'data' => ArrayHelper::map(University::find()->all(),'id','uni_name'),
    'options' => ['placeholder' => 'Filter as you type ...'],
]); ?>

答案 1 :(得分:0)

您可以将activeHiddenInput()用于此目的。

在模型中创建一个公共变量,说name

然后:

<?= $form->field($model, 'name')->widget(TypeaheadBasic::classname(), [
'data' => ArrayHelper::map(University::find()->all(),'id','uni_name'),
'pluginOptions' => ['highlight' => true],
'options' => ['placeholder' => 'Filter as you type ...'],
'select' => new yii\web\JsExpression("function( event, ui ) {
                        $('#id_of_hiddenField').val(ui.item.id);
                    }")
]); ?>
<?= Html::activeHiddenInput($model, 'university_id')?>

在Controller中获取activeHiddenField

的值