我有一个关于yii2 kartik小部件选择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,,但是结果是一样的
发布于 2016-12-07 09:04:24
嘿,#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; }'),
],
]);?>如果模型是新的‘选择.’显示了其他产品的名称,因为“选项”并没有起到多大作用,也不太希望有人对此抱有希望。
发布于 2016-03-18 11:10:53
问题是:
'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’。
我修改了JsExpression返回值,使用address.text (而不是adress.name)作为指导示例:链接。
然后,我还修改了返回结果的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;
}我希望这能帮助有类似问题的人。
发布于 2016-06-14 07:34:12
有点晚了..。但我也有同样的问题..。我通过赋值来解决这个问题
<?=
$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
}",
],
]);
?>https://stackoverflow.com/questions/35627490
复制相似问题