2017-02-13 4 views
0

Ich habe Erweiterung von Kartik, um dependrop erstellen, genannt DepDrop.Yii2 - Wie zeige ich ausgewählten Wert in depdrop Kind auf Aktion Update?

Mein abhängig Schema Regencies-> District-> Dörfer

Wenn Aktion erstellen, alles Okay, läuft Brunnen, aber als Update-Aktion, in den Kindern Dropdown zeigt nicht gewählten Wert.

Hier mein Code anzeigen:

<?= $form->field($model, 'fk_regencies_id')->dropDownList(ArrayHelper::map(Regencies::find()->all(),'id','name'), ['id'=>'regency_id']);?> 

          <?= Html::hiddenInput($model->fk_districs_id, $model->fk_districs_id, ['id'=>$model->fk_districs_id]) ?> 

          <?= $form->field($model, 'fk_districs_id')->widget(DepDrop::classname(), [ 

           'options'=>['id'=>'district-id'], 
           'pluginOptions'=>[ 
            'depends'=>['regency_id'], 
            'placeholder'=>'Select...', 
            'url'=>Url::to(['/calonpegawai/district']), 
            'params'=>[$model->fk_districs_id] 
           ] 
          ]) ?> 

Und hier ist mein Controller:

public function actionDistrict() { 
    $out = []; 
if (isset($_POST['depdrop_parents'])) { 
    $parents = $_POST['depdrop_parents']; 
    if ($parents != null) { 
     $regency_id = $parents[0]; 
     $param1 = null; 

     if (!empty($_POST['depdrop_params'])) { 
      $params = $_POST['depdrop_params']; 
      $param1 = $params[0]; // get the value of input-type-1 

     } 

     $out = Districts::getDistrictList($regency_id); 
     //$out[1] = ['id'=>$regency_id, 'name'=>$param1]; 
     $selected = Districts::getDefaultDistrict($param1); 
     //$selected[1] = ['id'=>$regency_id, 'name'=>$param1]; 
     // the getDefaultSubCat function will query the database 
     // and return the default sub cat for the cat_id 

     echo Json::encode(['output'=>$out, 'selected'=>$selected]); 
     return; 
    } 
} 
echo Json::encode(['output'=>'', 'selected'=>'']); 
} 

My Model:

public function getDistrictList($regency_id) 
{ 
    $data=\backend\models\Districts::find() 
     ->where(['regency_id'=>$regency_id]) 
     ->select(['id','name' ])->asArray()->all(); 

    return $data; 

} 
public function getDefaultDistrict($param1) 
{ 
    $data=\backend\models\Districts::find() 
     ->where(['id'=>$param1]) 
     ->select(['id','name' ])->asArray()->all(); 

    return $data; 

} 

ajaxresponse

+0

Können Sie das Browser-Anforderungsprotokoll von einem Inspector aus veröffentlichen? – meysam

+0

@meysam Ich habe Bild hinzugefügt, respons ajax –

+0

Es ist das Yii2 Debug-Panel, senden Sie bitte das Protokoll der Browser-Konsole. In Firefox drücken Sie Strg + Umschalt + K und in Chrome drücken Sie F12 für die Anzeige der Konsole. – meysam

Antwort

1

Ihre Ansicht hinzufügen: 'Daten " => [$ key => $ value];

<?= $form->field($model, 'fk_regencies_id')->dropDownList(ArrayHelper::map(Regencies::find()->all(),'id','name'), ['id'=>'regency_id']);?> 

         <?= Html::hiddenInput($model->fk_districs_id, $model->fk_districs_id, ['id'=>$model->fk_districs_id]) ?> 

         <?= $form->field($model, 'fk_districs_id')->widget(DepDrop::classname(), [ 
          'data' => [$model->fk_regencies_id=>$model->fk_regencies_id], 
          'options'=>['id'=>'district-id'], 

          'pluginOptions'=>[ 
           'depends'=>['regency_id'], 
           'placeholder'=>'Select...', 
           'url'=>Url::to(['/calonpegawai/district']), 
           'params'=>[$model->fk_districs_id] 
          ] 
         ]) ?> 

Javascript in Ihrer Ansicht hinzufügen:

$script = <<< JS 
    $("#regency_id").change(function(){ 
     $("#district-id").depdrop({ 
     depends: ['regency_id'], 
     url: '/calonpegawai/district' 
    }); 
    }).change(); 

JS; $ this-> registerJs ($ script);

Ich hoffe, Ihnen zu helfen.

Verwandte Themen