首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii2 kartik依赖下拉列表不加载下一个下拉列表

Yii2 kartik依赖下拉列表不加载下一个下拉列表
EN

Stack Overflow用户
提问于 2018-05-25 16:54:04
回答 1查看 274关注 0票数 0

我正在使用kartik DepDropdown小部件。当我选择区域时,它必须在特定的下拉列表中加载所有城市(例如id city_id的城市)。在chrome选项卡中,我可以看到该操作返回所有城市的预期结果json格式。

代码语言:javascript
复制
{
  "output": {
    "40": "Велико Търново",
    "41": "Горна Оряховица",
    "42": "Елена",
    "43": "Златарица",
    "44": "Лясковец",
    "45": "Павликени",
    "46": "Полски Тръмбеш",
    "47": "Свищов",
    "48": "Стражица",
    "49": "Сухиндол"
  },
  "selected": ""
}

但是它们不会加载到#city_id下拉列表中。我的看法是:

代码语言:javascript
复制
<div class="col-sm-6">

                                <?= $form->field($model, 'region_id')->dropDownList(Region::getAllRegions(), ['id' => 'region-dd', 'prompt'=> ' - ' . Yii::t('app', 'Region') . ' - ']); ?>

                            </div>
                            <div class="col-sm-6">

                                <?= $form->field($model, 'city_id')->widget(DepDrop::classname(), [
                                    'options'=>[
                                        'id'=>'city-id'
                                    ],
                                    'pluginOptions'=>[
                                        'allowClear' => true,
                                        'depends' => ['region-dd'],
                                        'url' => Url::to(['/system-information/load-cities'])
                                    ]
                                ]); ?>

                            </div>

我的控制器:

代码语言:javascript
复制
public function actionLoadCities()
    {
        $out = [];

        if (isset($_POST['depdrop_parents'])) {
            $parents = $_POST['depdrop_parents'];
            if ($parents != null) {
                $region_id = $parents[0];
                $out = City::getAllCities($region_id);
                echo Json::encode(['output'=>$out, 'selected'=>'']);
                return;
            }
        }
        echo Json::encode(['output'=>'', 'selected'=>'']);
    }

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-25 19:23:09

您必须提供要为单个选项分配的name=>valueidtext,如果查看DOCS,您将看到必须返回如下所示的数组

代码语言:javascript
复制
[
   'out'=>[
       ['id'=>'<city-id>', 'name'=>'<city-name>'],
       ['id'=>'<city-id>', 'name'=>'<city-name>']
    ],
    'selected'=>'<city-id>'
]

这意味着id将与索引id一起提供,下拉列表的文本将与索引name一起提供,并且查看您提供的响应,您的方法getAllCities正在返回如下所示的数组

代码语言:javascript
复制
 [
    'id'=>'name',
    'id'=>'name',
 ]

您没有添加方法City::getAllCities($region_id);,它返回的是$out数组,但是在非常基本的级别上,它应该如下所示,

注意:分别更改tablecolumn名称,假设您有城市的idname列,如果您有城市名称的其他列名(如city_name ),则必须在查询中为city_name字段创建别名name

代码语言:javascript
复制
public function getAllCities($region_id){

    $query = new \yii\db\Query;
    $query->select('id, name')
        ->from('{{%city}}')
        ->where(['=', 'region_id', $region_id])
        ->limit(20);
    $command = $query->createCommand();
    return $command->queryAll();

}

这将返回如下所示的数组。

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [id] => 40
            [name] => Велико Търново
        )

    [1] => Array
        (
            [id] => 41
            [name] => Горна Оряховица
        )

    [2] => Array
        (
            [id] => 42
            [name] => Елена
        )

    [3] => Array
        (
            [id] => 43
            [name] => Златарица
        )

)

它将被编码为JSON,如下所示

代码语言:javascript
复制
[
  {
    "id": "40",
    "name": "Велико Търново"
  },
  {
    "id": "41",
    "name": "Горна Оряховица"
  },
  {
    "id": "42",
    "name": "Елена"
  },
  {
    "id": "43",
    "name": "Златарица"
  }
]

最后,当按行编码时

代码语言:javascript
复制
echo Json::encode(['output'=>$out, 'selected'=>'']);

它会回来的

代码语言:javascript
复制
{
  "output": [
    {
      "id": "40",
      "name": "Велико Търново"
    },
    {
      "id": "41",
      "name": "Горна Оряховица"
    },
    {
      "id": "42",
      "name": "Елена"
    },
    {
      "id": "43",
      "name": "Златарица"
    }
  ],
  "selected": ""
}

希望这能有所帮助。

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

https://stackoverflow.com/questions/50533780

复制
相关文章

相似问题

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