首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Yii2中的Dependent下拉列表在更新时丢失值

Yii2中的Dependent下拉列表在更新时丢失值
EN

Stack Overflow用户
提问于 2018-06-01 04:11:54
回答 1查看 331关注 0票数 0

我创建了一个表单,它的下拉列表依赖于另一个表单(没有扩展),它运行得很快。

但是,当您尝试更改相同的表单时,第二个下拉列表的值将丢失(type_id)。基本上,类型字段取决于所选的区域。请看我的代码:

_form.php

代码语言:javascript
复制
<?= $form->field($model, 'area_id')->dropDownList(ArrayHelper::map(Department::find()->where(['helpdesk' => 1])->all(),'id','name'),['prompt'=>'Selecione a Área',
        'onchange' => '
        $.post("index.php?r=helpdesk/solicitation/lists&id=' . '"+$(this).val(),function(data){
            $("select#solicitation-type_id").html(data);
        });']) ?>  

<?php
echo $form->field($model, 'type_id')->dropDownList(['prompt'=>'Selecione a Área']);
?>   

控制器

代码语言:javascript
复制
public function actionLists($id)
{
    $countType = Type::find()
            ->where(['area_id' => $id])
            ->count();

    $types = Type::find()
            ->where(['area_id' => $id])
            ->orderBy(['name' => SORT_ASC])
            ->all();

    if($countType > 0 )
    {
        foreach($types as $type ){
            echo "<option value='".$type->id."'>".$type->name."</option>";
        }
    }
    else{
        echo "<option> - </option>";
    }

}

我认为这个topic也有同样的问题,但我不明白它是如何工作的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-01 06:12:22

您需要提供默认选项集,当您未提供任何数据时,应从中选择保存的选项

代码语言:javascript
复制
<?php
$types = Type::find()
            ->where(['area_id' => $model->area_id])
            ->orderBy(['name' => SORT_ASC])
            ->all();

echo $form->field($model, 'type_id')->dropDownList(ArrayHelper::map($types,'id','name'),['prompt'=>'Selecione a Área']);
?>   

现在,当您使用findOne()并选择模型时,将自动选择为type_id保存的值。

您可以在controller/action中移动上面的查询,并将$types传递给视图。

您还可以通过使用count($types)来创建actionLists D.R.Y方法,并删除第一个查询

代码语言:javascript
复制
public function actionLists($id)
{

    $types = Type::find()
            ->where(['area_id' => $id])
            ->orderBy(['name' => SORT_ASC])
            ->all();

    if(count($types) > 0 )
    {
        foreach($types as $type ){
            echo "<option value='".$type->id."'>".$type->name."</option>";
        }
    }
    else{
        echo "<option> - </option>";
    }

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

https://stackoverflow.com/questions/50632059

复制
相关文章

相似问题

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