2016-03-21 7 views
0

Üç modelim var: User, Job ve UserJob. Kullanıcı ve İş modelleri n: m ilişkisine sahiptir. Kullanıcı formunda dinamik olarak yeni işler eklemem gerekiyor. Model, Kullanıcı tanımlı Yii2: İlgili modelden dinamik DateControl alanlarının bir forma eklenmesi

Ben geçerli kullanıcı ile ilgili işlere: görüntüleme/kullanıcı olarak

public function getUserJobs() { 
    return UserJob::find() 
     ->where(['user_id' => $this->id]) 
     ->orderBy('start DESC') 
     ->all(); 
} 

/aşağıdaki gibi mevcut işleri forma eklenen _form.php şunlardır:

if (isset($userJobs)) { 
    $i = 0; 
    foreach ($userJobs as $job) { 
     $i++; 
     ... 
     echo $form->field($job, '['.$i.']start')->widget(DateControl::className(), [ 
      'type' => kartik\datecontrol\DateControl::FORMAT_DATE, 
      'saveOptions' => [ 
       'name' => 'job_start[]', 
      ], 
     ])->label(false); 
     ... 

jQuery ile yeni işini ekliyorum (bu examples ile benzer şekilde). Çoğu alan için mükemmel çalışır. Ancak, DateControl uzantısını kullanan alanı alanından bir sorun var. Uzantı kendi jQuery komut dosyasını üretir. Bu komut dosyasını işlemeksizin başlangıç ​​alanı düzgün çalışmayabilir.

Yeni DateControl alanlarını forma dinamik olarak eklemek için bir yol var mı?

cevap

0

Muhtemel bir çözüm iş alanları ile bir kaç gizli satırları eklemektir:

for ($j=$i; $j < $i+3; $j++) { 
    $job = new MitarbeiterJob(); 
    echo '<tr style="display:none;" class="new_job">'; 
    ... 
    echo $form->field($job, '['.$j.']start')->widget(DateControl::className(), [ 
      'type' => DateControl::FORMAT_DATE, 
      'saveOptions' => [ 
       'name' => 'job_start[]', 
      ], 
     ])->label(false); 
    } 
    ... 

kullanıcı düğmeye 'Yeni iş ekleme' tıklarsa, o zaman bir jQuery komut satırları biri gösterilmektedir.

Çalışıyor, ancak çözüm en uygun ...