Yii2:将相关模型中的动态DateControl字段添加到表单中

时间:2016-03-21 12:20:01

标签: datepicker yii2

我有三个模型:User,Job和UserJob。模型User和Job具有n:m关系。在用户表单中,我需要动态添加新作业。

在模型用户中,我获得与当前用户相关的作业:

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

在views / user / _form.php中,现有作业添加到表单中,如下所示:

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类似)。对于大多数领域,它完美无缺。但 start 字段存在问题,该字段使用DateControl扩展名。扩展程序生成自己的jQuery脚本。如果不操作此脚本,则start字段无法正常工作。

有没有办法如何动态地将新的DateControl字段添加到表单?

1 个答案:

答案 0 :(得分: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脚本会显示其中一行。

它有效,但解决方案不是最佳的......