
[英]Yii2 kartik-v select2 widget allowClear and placeholder not working properly
[英]yii2 select2 by kartik-v set default value
我有一个关于 yii2 kartik-v widget select 2 的问题。
在我看来,小部件附加到一个字段
<?=
$form->field($model, 'address')->widget(Select2::className(), [
'options' => ['placeholder' => 'Inserta an address '],
'pluginOptions' => [
'allowClear' => true,
'minimumInputLength' => 3,
'ajax' => [
'url' => Url::to(['register/addresses']),
'dataType' => 'json',
'data' => new JsExpression('function(params) { return {q:params.term}; }')
],
'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
'templateResult' => new JsExpression('function(address) { return address.name; }'),
'templateSelection' => new JsExpression('function (address) { return address.name; }'),
],
'pluginEvents' => [
"select2:select" => "function(e) {
// some function
}",
],
]);
?>
如果在我的控制器中我想为此字段设置一个值
如: $model->address = "Some Value";
在视图中该字段保持空白
我能做什么?
更新!
正如文档所说,如果我使用此插件的 ajax 版本,我可以使用选项:'initValueText'。 所以我尝试设置'initValueText' => $model->address,
但结果是一样的
问题是这样的:
'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
'templateResult' => new JsExpression('function(address) { return address.name; }'),
'templateSelection' => new JsExpression('function (address) { return address.name; }'),
似乎这个插件想要一个特定的返回键“templateResult”和“templateSelection”。
我已经使用 address.text(而不是 adress.name)作为指南示例修改了 JsExpression 返回值: Link 。
然后我还修改了返回结果的 PHP 方法:
public function actionAddresses($q = NULL, $id = NULL)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$results = array();
if (!is_null($q)) {
$geocoder = new GeocodingClient();
$request = $geocoder->lookup(['address' => $q]);
$counter = 1;
foreach ($request['results'] as $key => $value) {
$results['results'][] = [
'id' => $counter,
'text' => $value['formatted_address'], // Instead of 'name'
'coordinate' => $value['geometry']['location']
];
$counter++;
}
}
return $results;
}
我希望这可以帮助有类似问题的人。
有点晚了..但我也有同样的问题..我通过赋值解决了它
<?=
$form->field($model, 'address')->widget(Select2::className(), [
'initValueText' => $model->address,
'value' => $model->address,
'options' => ['placeholder' => 'Inserta an address '],
'pluginOptions' => [
'allowClear' => true,
'minimumInputLength' => 3,
'ajax' => [
'url' => Url::to(['register/addresses']),
'dataType' => 'json',
'data' => new JsExpression('function(params) { return {q:params.term}; }')
],
'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
'templateResult' => new JsExpression('function(address) { return address.name; }'),
'templateSelection' => new JsExpression('function (address) { return address.name; }'),
],
'pluginEvents' => [
"select2:select" => "function(e) {
// some function
}",
],
]);
?>
嘿,我在 #ajax 上遇到了同样的问题,占位符和 initValueText 都没有显示我所做的就是这个
<?php
$product = $model->product_id ? Product::findOne($model->product_id)->name : 'select ....';
echo $form->field($model, 'product_id')->widget(Select2::classname(), [
'initValueText' => $product, // set the initial display text
// 'options' => ['placeholder' => 'select ....'],
'pluginOptions' => [
'allowClear' => true,
'minimumInputLength' => 3,
'ajax' => [
'url' => Url::to(['list']),
'dataType' => 'json',
'data' => new JsExpression('function(params) { return {q:params.term}; }')
],
'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
'templateResult' => new JsExpression('function(product_id) { return product_id.name; }'),
'templateSelection' => new JsExpression('function (product_id) { return product_id.name; }'),
],
]);?>
如果模型是新的,则显示“select ....”,否则会显示产品名称,因为“选项”没有做太多,也希望这对某人有希望
你使用kartik select2,在控制器中你已经为'initValueText'设置了一个值(id/ids)和名称值
$model->id = 1; // or if arrays [1,3,4,5]
$username = User::find()->select('name')->where('id' => $model->id)->scalar();
并在视图 kartik select2
$form->field($model, 'username')->widget(Select2::className(), [
'initValueText' => $username;
...
我面临同样的问题。 然后我在选项中尝试了 value key 并且它起作用了。
<?php
echo $form->field($model, 'test')->widget(Select2::classname(), [
//'data' => ['test', 'test2'],
'initValueText'=>['test','test2'],
'options' => ['multiple' => true, 'value'=>['1','2']],
'pluginOptions' => [
'multiple' => true,
'allowClear' => true,
'minimumInputLength' => 1,
'language' => [
'errorLoading' => new JsExpression("function () { return 'Waiting for results...'; }"),
],
'ajax' => [
'url' => '...',
'dataType' => 'json',
'data' => new JsExpression('function(params) { return {q:params.term}; }')
],
'escapeMarkup' => new JsExpression('function (m) { return m; }')
?>
希望这会对某人有所帮助。
我通过使用触发功能修复了这个解决方案。 在下面的方法中,我们可以在 kartik select2 小部件中设置默认值。
$('#id').val(11).trigger('change'); //in val() mention the hash value of your select2 list
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.