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 関数の成功コールバックで使用して、select (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 に答える