【问题标题】:yii2 select2 by kartik-v set default valueyii2 select2 by kartik -v 设置默认值
【发布时间】:2016-02-25 12:35:15
【问题描述】:

我有一个关于 yii2 kartik-v 小部件选择 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

                }",
    ],
]);
?>

如果在我的控制器中我想为这个字段设置一个值

like:$model-&gt;address = "Some Value"; 在视图中该字段保持空白

我能做什么?

更新!

正如文档所说,如果我使用此插件的 ajax 版本,我可以使用选项:'initValueText'。所以我尝试设置'initValueText' =&gt; $model-&gt;address,,但结果是一样的

【问题讨论】:

标签: php yii2


【解决方案1】:

嘿,我遇到了与 #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; }'),
        ],
    ]);?>

如果型号是新的,则显示“选择 ....”,否则显示产品名称 因为“选项”也没有做太多 希望这对某人有希望

【讨论】:

    【解决方案2】:

    问题是这样的:

      '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)作为指导示例: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;
    }
    

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

    【讨论】:

      【解决方案3】:

      有点晚了..但我也有同样的问题..我通过赋值解决了它

        <?=
        $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
      
                  }",
      ],
         ]);
       ?>
      

      【讨论】:

        【解决方案4】:

        您使用 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

        $form->field($model, 'username')->widget(Select2::className(), [
        'initValueText' => $username;
        ...
        

        【讨论】:

          【解决方案5】:

          我遇到了同样的问题。然后我在选项中尝试了 value 键,它起作用了。

          <?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; }') 
                                          ?>
                                
          

          希望对某人有所帮助。

          【讨论】:

            【解决方案6】:

            我通过使用触发功能解决了这个问题。在下面的方法中,我们可以在 kartik select2 小部件中设置默认值。

            $('#id').val(11).trigger('change'); //in val() mention the hash value of your select2 list 
            

            【讨论】:

              猜你喜欢
              • 2018-05-11
              • 1970-01-01
              • 2017-10-16
              • 1970-01-01
              • 1970-01-01
              • 2017-11-10
              • 2018-05-25
              • 2013-11-24
              • 1970-01-01
              相关资源
              最近更新 更多