yii2 Kartik-V Typeahead 基本自动完成名称但存储整数值
yii2 Kartik-V Typeahead Basic autocomplete on name but store integer value
更新如下
我正在尝试将 Kartik-V Typeahead Basic 小部件与 Yii2 框架一起使用。
下面的代码正在显示所需的数据,用户可以通过大学名称进行搜索,它会出现在自动完成列表中。
问题是,模型需要大学 ID,而不是名称。因此,规则是此字段只能存储一个整数,并且 return 一旦您 select 一个预先输入的结果,就会出现验证错误。
<?= $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 ...'],
]); ?>
我希望有人能帮助我了解是否需要更改设置,以便在保存时将用户友好的 'uni_name' 数据改回 uni 'id'。
更新:
感谢 "Insane Skull".
新密码是:
<?= $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() 必须 return 一个字符串值
您可以使用 activeHiddenInput() 来达到这个目的。
在模型中创建一个 public 变量说 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
的值。
我宁愿使用 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 ...'],
]); ?>
更新如下
我正在尝试将 Kartik-V Typeahead Basic 小部件与 Yii2 框架一起使用。
下面的代码正在显示所需的数据,用户可以通过大学名称进行搜索,它会出现在自动完成列表中。
问题是,模型需要大学 ID,而不是名称。因此,规则是此字段只能存储一个整数,并且 return 一旦您 select 一个预先输入的结果,就会出现验证错误。
<?= $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 ...'],
]); ?>
我希望有人能帮助我了解是否需要更改设置,以便在保存时将用户友好的 'uni_name' 数据改回 uni 'id'。
更新: 感谢 "Insane Skull".
新密码是:
<?= $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() 必须 return 一个字符串值
您可以使用 activeHiddenInput() 来达到这个目的。
在模型中创建一个 public 变量说 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
的值。
我宁愿使用 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 ...'],
]); ?>