2016-03-21 6 views
0

私は3つのモデルUser、Job、UserJobを持っています。モデルUserとJobにはn:mの関係があります。ユーザーフォームでは、新しいジョブを動的に追加する必要があります。私は、現在のユーザーに関連した仕事を得るモデルのユーザーにYii2:関連するモデルの動的DateControlフィールドをフォームに追加する

:ビュー/ユーザー/ _form.phpで

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

を次のように既存ジョブは、フォームに追加されます。

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で追加します(examplesと同様)。ほとんどのフィールドでは完全に動作します。しかし、フィールドの開始には、DateControl拡張子を使用する問題があります。拡張機能は独自のjQueryスクリプトを生成します。このスクリプトを操作しなければ、開始フィールドは正しく機能しません。

新しいDateControlフィールドをフォームに動的に追加する方法はありますか?

答えて

0

可能な解決策は、ジョブ・フィールドを持ついくつかの非表示の行を追加することです:

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); 
    } 
    ... 

ユーザーがボタン「新しいジョブを追加」をクリックすると、jQueryのスクリプトは、行の1つを示しています。

これは機能しますが、解決策は最適ではありません。

関連する問題