首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >yii2 select2由kartik-v设置默认值

yii2 select2由kartik-v设置默认值
EN

Stack Overflow用户
提问于 2016-02-25 12:35:15
回答 6查看 14.9K关注 0票数 6

我有一个关于yii2 kartik小部件选择2的问题。

在我的视图中,小部件被附加到一个字段中。

代码语言:javascript
复制
<?=
$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,,但是结果是一样的

EN

回答 6

Stack Overflow用户

发布于 2016-12-07 09:04:24

嘿,#ajax也有同样的问题,占位符和initValueText都没有展示我所做的

代码语言:javascript
复制
<?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; }'),
        ],
    ]);?>

如果模型是新的‘选择.’显示了其他产品的名称,因为“选项”并没有起到多大作用,也不太希望有人对此抱有希望。

票数 2
EN

Stack Overflow用户

发布于 2016-03-18 11:10:53

问题是:

代码语言:javascript
复制
  '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方法:

代码语言:javascript
复制
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;
}

我希望这能帮助有类似问题的人。

票数 1
EN

Stack Overflow用户

发布于 2016-06-14 07:34:12

有点晚了..。但我也有同样的问题..。我通过赋值来解决这个问题

代码语言:javascript
复制
  <?=
  $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

            }",
],
   ]);
 ?>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35627490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档