向 <f:link.action> 添加动态参数

Add a dynamic parameter to <f:link.action>

EDIT: I made some changes to my question because I had the feeling I didn't make it clear what I'm trying to do - hopefully it makes more sense now.

我有一个预约列表,按日期分组,然后按律师分组。

我的目标: 我需要每个律师旁边有一个删除按钮,用于删除特定日期的律师的所有约会,并在显示用户可以插入可选信息消息的对话框后向律师发送电子邮件 =31=]。

除了 粗体 部分之外的所有内容都已经有效。

单击时,我创建了一个带有 jQuery 的对话框。

如何在对话框中获取约会信息(律师和日)?

我尝试在我的对话框中使用一个表格,它看起来不错,但我仍然不知道如何在其中插入律师姓名和日期,并且约会不再传递给控制器​​,只有可选的msg.

这是我在收到你们的第一次反馈后的尝试(不工作 - 约会没有通过控制器,我仍然不知道如何显示点击的律师姓名和约会日期):

<sp:groupedForDateTime each="{paginatedAppointments}" 
                       as="appointmentsByDay" 
                       groupBy="startDate"
                       format="d.m.Y"
                       groupKey="startDate">
Termine am {startDate->f:format.date(format:'d.m.Y')}
<f:groupedFor each="{appointmentsByDay}" 
              as="appointmentsByLawyer" 
              groupBy="lawyer.fullName"
              groupKey="lawyerName">
   <f:link.action class="lcapp-delete-link" action="deleteMultiple" arguments="{appointments: appointmentsByLawyer}">
     Termine löschen
   </f:link.action>
</f:groupedFor>
</sp:groupedForDateTime>

//How do I get information into the div after clicking on a "lcapp-delete-link"?
<div style="display:hidden">
<div id="lcapp-dialog-delete-msg" class="lcapp-dialog-delete-msg">
<f:form action="deleteMultiple" method="post" id="messageForm">
    //<h2>Termine für !!(Lawyer clicked: ){lawyer.fullName}!! am !!(Corresponding date: ){startDate->f:format.date(format:'d.m.Y')}!! löschen</h2>
    <p>Begründung (optional)</p>
    <f:form.textarea id="msg" name="msg"/>
</f:form>
</div>
</div>

<script>
$(document).ready(function (r) {
  $('.lcapp-delete-link').click(function (ev) {
    ev.preventDefault();
    ev.stopPropagation();
    var goto = this.href;

    $('.lcapp-dialog-delete-msg').dialog({
        resizable: false,
        height: 500,
        width: 430,
        modal: true,
        buttons: {
            'Löschen und Benachrichtigen': function () {
                $('#messageForm').attr('action', goto).submit();
            },
            'Abbrechen': function () {
                $(this).dialog("close");
                $(this).dialog("destroy");
            }
        }
    });
  });
});
</script>

如果您想修改或删除对象,您应该使用 HTTP-POST 而不是 GET。因此,您可以使用一个小表单并提交文本区域。不要忘记在 "deleteMultiple" 操作中将您的字段作为参数提及。

要预填充您的文本字段,您可以使用文本字段视图帮助程序的值属性。 (https://fluidtypo3.org/viewhelpers/fluid/master/Form/TextareaViewHelper.html)

您应该使用 <f:form action=""> 和里面的消息字段构建一个合适的 extbase 表单。

<div id="lcapp-dialog-delete-msg" class="lcapp-dialog-delete-msg">
  <f:form action="deleteMultiple" method="post" id="messageForm">
    <h2>Termine für am löschen</h2>
    <p>
        Begründung (optional)
    </p>
    <f:form.textarea id="msg" name="msg"/>
  </f:form>
</div>

然后你可以修改它的action参数为jQuery并提交。由于您删除 links 的网址是使用适当的 cHash 构建的,因此提交表单不会有任何问题。

$('.lcapp-delete-link').click(function (ev) {
    ev.preventDefault();
    ev.stopPropagation();

    var clicked = $(this);
    var goto = clicked.attr('href');
    $('.lcapp-dialog-delete-msg').dialog({
        resizable: false,
        height: 500,
        width: 430,
        modal: true,
        buttons: {
            'Löschen und Benachrichtigen': function () {
                $('#messageForm').attr('action', goto).submit();
            },
            'Abbrechen': function () {
                $(this).dialog("close");
                $(this).dialog("destroy");
            }
        }
    });
});

PS:您可以使用本机 JS 获取 link 的 href 而不是 jQuery 应该会带来更好的性能:

// instead of
var goto = clicked.attr('href');
// you can use
var goto = this.href;