我有三个模型: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字段添加到表单?
答案 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脚本会显示其中一行。
它有效,但解决方案不是最佳的......