在OctoberCMS中使用RelationRender添加关系后,如何更新后端表单?

时间:2019-03-14 13:51:18

标签: pivot octobercms octobercms-plugins octobercms-backend octobercms-widgets

我有2个具有预订关系和出席者关系的模型

我也有一个BookingAttendee枢纽模型-因此,我可以利用它们具有的afterCreate方法。

在我要添加与会者的预订的后端表单中-我正在使用局部视图来与<?= $this->relationRender('attendees') ?>呈现关系,并且一切正常。

预订有一些价格属性,每次添加或删除与会者时,我都希望在页面上对其进行更新。

在创建关系后,relationWidget上是否发生任何类型的方法,可以让我更新页面上的div?

根据文档,我可以使用以下4种方法在RelationController上进行扩展

relationExtendViewWidget()
relationExtendManageWidget()
relationExtendPivotWidget()
relationExtendRefreshResults()

问题是我不知道如何使用它们来更新页面上的内容。

1 个答案:

答案 0 :(得分:0)

您必须在关系渲染中添加具有唯一ID的div。 例如:

<div id="delegates-relation">
    <?= $this->relationRender('delegates') ?>
</div>

然后,在您的控制器中,您必须添加relationExtendRefreshResults($field)方法,并从具有上面定义的ID的关系渲染中返回新的html。

/**
 * Update fields after a relation has changed
 *
 * @param $field the relation field that has changed.
 * @return array|null
 */
public function relationExtendRefreshResults($field):? array
{
    if ($field !== 'yourField') { // here you can check which field was updated.
        return null;
    }

    return [
        '#delegates-relation'=> $this->relationRender('delegates'),
    ];
}