0

我正在尝试使用需要依赖下拉菜单的 Yii 框架设置一个新应用程序,这样当用户选择 jobSkillArea 时,下一个下拉菜单 jobSkillSpecialty 的选项将使用内置的 jQuery 方法加载。我已经从我在这里和 Yii 论坛中找到的东西中复制和修改了代码,但我什么也没得到,甚至在 Chrome 的 javascript 控制台中也没有。谁能看看这个,看看我哪里出错了?谢谢。

这是我认为两个下拉列表的代码:

<div class="row">
    <?php echo $form->labelEx($model,'jobSkillArea'); ?>
    <?php 
        $list = array();
        $list = CHtml::listData(validJobSkillAreas::model()->findAll(), 'JobSkillArea', 'JobSkillArea');
        echo $form->dropDownList($model, 'jobSkillArea', $list, 
            array('prompt'=>'--Select Skill Area--'),
            array(
                'ajax'=>array(
                    'type'=>'POST',
                    'data'=>array('jobSkillArea'=>'js:this.value'),
                    'url'=>CController::createUrl('NewConsFormController/getSkillSpecialty'),
                    'update'=>'#'.CHtml::activeId($model,'jobSkillSpecialty')
                )
            )
        );
    ?>
    <?php echo $form->error($model,'jobSkillArea'); ?>
</div>
<div class="row">
    <?php echo $form->labelEx($model,'jobSkillSpecialty'); ?>
    <?php
        $list = array();
        $list = CHtml::listData(validJobSkillSpecialties::model()->findAll(),'jobSkillSpecialty','jobSkillSpecialty');
        echo $form->dropDownList($model, 'jobSkillSpecialty', array(), array('prompt'=>'--Select Skill Specialty--'));
    ?>
    <?php echo $form->error($model,'jobSkillSpecialty'); ?>
</div>

然后下面是我的控制器中第一个下拉菜单调用的代码。第一个发现是获取链接父级和子级的 ID,因为我没有将 KeyValue 存储在最终产品中。其余的都是来自论坛的。

public function actionGetSkillSpecialty() {
    $areaID = ValidJobSkillAreas::model()->find('JobSkillArea=:SkillArea',
        array(':SkillArea'=>'$_POST[$jobSkillArea]'));
    $data=ValidJobSkillSpecialties::model()->findAll('SkillAreaId=:SkillAreaId', 
            array(':SkillAreaId'=>$areaID->ID));

    $list=array();
    $list=CHtml::listData($data,'jobSkillSpecialty','jobSkillSpecialty');

    echo "<option value=''>--Select Skill Specialty--</option>";
    foreach($list as $value=>$jobSkillSpecialty)  {
        echo CHtml::tag('option',
           array('value'=>$value),CHtml::encode($jobSkillSpecialty),true);
    }
}

该视图是 _form 视图中的部分渲染,因为这是我可以让手风琴小部件与我拥有的字段一起工作的唯一方法。这是调用包含两个下拉选择框的 jobDetails 部分的手风琴代码。

<div id="accordion">
    <?php
    $this->widget('zii.widgets.jui.CJuiAccordion', array(
        'panels'=>array(
            'Job Details'=>$this->renderPartial('_partial_jobdetails',array('model'=>$model,'this'=>$this,'form'=>$form),true,false),
            'Consultant Details'=>$this->renderPartial('_partial_consdetails',array('model'=>$model,'this'=>$this,'form'=>$form),true,false),
            'Client Details'=>$this->renderPartial('_partial_clientdetails',array('model'=>$model,'this'=>$this,'form'=>$form),true,false),
            'Internal Info'=>$this->renderPartial('_partial_internaldetails',array('model'=>$model,'this'=>$this,'form'=>$form),true,false),
            'Form Requirements'=>$this->renderPartial('_partial_formsdetails',array('model'=>$model,'this'=>$this,'form'=>$form),true,false),
            'JPMC Details'=>$this->renderPartial('_partial_jpmcdetails',array('model'=>$model,'this'=>$this,'form'=>$form),true,false),
        ),
        // additional javascript options for the accordion plugin
        'options'=>array(
            'collapsible'=>true,
            'active'=>false,
            'autoHeight'=>false,
            'heightStyle'=>'content',
        ),
        'htmlOptions'=>array(
            // HTML options you may need
        ),
    ));
    ?>
</div>
4

1 回答 1

0

请尝试以下代码

看法

<?php                                   
  echo CHtml::dropDownList('region_id','', 
  CHtml::listData($courses, 'course_id', 'course_name'),
  array(
    'prompt'=>'Select Region',
    'ajax' => array(
    'type'=>'POST', 
    'url'=>CController::createUrl('loadcities'),
    'update'=>'#city_name', 
  'data'=>array('region'=>'js:this.value'),
  ))); 
 echo CHtml::dropDownList('city_name','', array(), array('prompt'=>'Select City'),
);
?>

=================================================

控制器功能

public function actionLoadcities()
{
   $data=City::model()->findAll('course='.$_POST['region'], 
   array(':region'=>(int) $_POST['region']));
    $data=CHtml::listData($data,'city_id','city_name');
    echo "<option value=''>Select City</option>";
   foreach($data as $value=>$city_name)
   echo CHtml::tag('option', array('value'=>$value),CHtml::encode($city_name),true);
}
于 2013-11-20T14:10:16.493 回答