3

这是我的代码:

<p>
  <?php echo $form->labelEx($model,'phone_type'); ?>
  <span class="field">
  <?php echo $form->dropDownList($model,'phone_type', 
     CHtml::listData(PhonesTypes::model()->findAll(),
 'id','type' )); ?>     
  <?php echo $form->error($model,'phone_type'); ?>
</span>                                 
</p>

将有一个按钮来注册新的电话类型。所以,在提交表单之后,那将是一个 CJUiDialog 内部,我希望上面的 dropDownList 用新类型更新,而不刷新页面。

我用谷歌搜索了很多,但我只在 Yii 中找到与“依赖下拉菜单”相关的东西。

解决这个问题的更好方法是什么?有没有类似的东西$.fn.cgridview.update

这是对话框代码:

<?php  $this->endWidget('zii.widgets.jui.CJuiDialog');

  $this->beginWidget('zii.widgets.jui.CJuiDialog', array(
   'id'=>'dialog-crud',
   'options'=>array(
    'title'=>'Create new Phone Type',
    'autoOpen'=>false,
    'modal'=>true,
    'width'=>1080,
    'height'=>820,
    'resizable'=>false
    ),
  ));
 ?>

<iframe src="http://myapp/phone_types/create"  width="100%" height="100%"></iframe>

<?php $this->endWidget(); ?>

而控制器的代码,是一个微不足道的创建函数:

public function actionCreate(){

$model = new PhoneType;

if(isset($_POST['PhoneType'])){  

  $model->attributes = $_POST['PhoneType'];

  if( $model->save() ){

    //----> some suggestion here? echo CHtml::script("");
    Yii::app()->end();

  }
 }
}

所以,下面是我的解决方案的代码。 在视图中:

<?php $this->beginWidget('zii.widgets.jui.CJuiDialog', array(
  'id'=>'dialog',
  'options'=>array(
    'title'=>'Phone Types',
    'autoOpen'=>false,
    'modal'=>true,
    'width'=>1080,
    'height'=>820,
    'resizable'=>false
  ),
  ));
 ?>
 <iframe src="phoneTypes/create" id="cru-frame" width="100%" height="100%"></iframe>
 <?php $this->endWidget(); ?>

在我的 PhoneTypesController 中:

public function actionCreate(){

    $model = new PhoneTypes;

    if(isset($_POST['PhoneTypes'])){

        $model->attributes = $_POST['PhoneTypes'];

        if($model->save()){             

            echo CHtml::script("
                window.parent.$('#dialog').dialog('close');
                window.parent.$('#Phone_types_id').append('<option value=".$model->id." >'+'".$model->type."'+'</option>');
            ");

            Yii::app()->end();                
        }   
    }

    $this->render('create',array(
        'model'=>$model,
    ));
}
4

1 回答 1

0

您可能有一个添加电话类型的操作(对于本示例,我们称之为 phoneType/create)。

当您向该操作发送 ajax 请求以创建您的电话类型时,该操作应返回新创建的电话类型信息。然后,您可以使用 jQuery 将其添加到下拉列表中。

看这个例子:

<?php
// In protected/controllers/PhoneTypeController.php
public function actionCreate($phoneType)
{
    $phoneType = new PhoneType;
    $phoneType->phone_type = $phoneType;
    if ($phoneType->save())
    {
        echo CJSON::encode(array('value' => $phoneType->id, 'label' => $phoneType->phone_type)); // echos something like {"value":5,"label":"test"}
    }
}
?>

对于本示例的其余部分,我将假设您的原始模型(您具有 phone_type 字段的模型)称为 Company(这会影响下面我选择 phone_type 下拉列表的 jQuery 代码)。

然后,您可以在 ajax 函数的成功回调中使用此输出为您的选择添加一个新选项(IE 下拉菜单):

jQuery.get( // your 'data' and 'url' here
    success: function(data) {
        $('#Company_phone_type').append('<option value="' + data.value + '">' + data.label + '</option>');
});

有关如何在 jQuery 中执行此操作的更多信息,请参阅使用 Jquery/javascript 向选择添加选项

于 2013-08-01T05:43:54.873 回答