如何使用OctoberCMS使用AJAX更新Manage step上的pivot字段?
在将相关记录链接到主记录之后,我尝试从服务器获取一些pivot数据的值。 这里是输入pivot数据的步骤,其中一些数据应该生成(手动输入没有问题,问题是通过AJAX实现): 下面是一个相关字段的示例。yaml如何使用OctoberCMS使用AJAX更新Manage step上的pivot字段?,ajax,octobercms,octobercms-backend,Ajax,Octobercms,Octobercms Backend,在将相关记录链接到主记录之后,我尝试从服务器获取一些pivot数据的值。 这里是输入pivot数据的步骤,其中一些数据应该生成(手动输入没有问题,问题是通过AJAX实现): 下面是一个相关字段的示例。yaml fields: pivot[sort]: label: Order type: number span: auto pivot[time_from_start_to_sight]: label: Time f
fields:
pivot[sort]:
label: Order
type: number
span: auto
pivot[time_from_start_to_sight]:
label: Time from start to the sight
type: number
span: auto
pivot[add_route_time]:
label: Add time
type: number
span: auto
pivot[add_route_price]:
label: Basic add. price
type: number
span: auto
pivot[stay_time_default]:
label: Default stay time
type: number
span: auto
pivot[stay_time_min]:
label: Min. stay time
type: number
span: auto
pivot[stay_price]:
label: Price per quarter of hour
type: number
span: auto
_gmaps_sync:
label: You may try to get data from Google Maps API
type: gmapsroutesightsync
commentAbove: Make sure you have entered Google Maps API key
如您所见,我添加了一个自定义小部件,以便能够绘制按钮。
我甚至可以调用小部件的AJAX处理程序,并将新值应用于传递的数据,并将它们保存到控制器内的DB中
但是我根本不知道如何推送更新的部分或用新值更新部分。当然,可以用无组织的JS代码更新每个字段,但我相信有一种聪明的方法
请指出最佳实践。谢谢。可能您需要更新您的部分表单,从正在更新所有数据并保存它的控制器中推送它 我想对于pivot数据表单,您已经定义了将呈现“关系”的分部,以便可以更新该分部 当您使用10月份的ajax框架进行ajax调用时,您可以使用 数据请求更新=“关系:”#表单关系类管理数据透视表单” 或 如果以编程方式触发请求,则可以执行以下操作
$.request('onRefreshTime', {
update: { relation: '#Form-relationClassesManagePivotForm' }
})
您可以在此处详细查看api:
这里我的轴心关系名称是“classes”,所以id是这样生成的,但您可以检查元素以获得正确的id,它将位于“模态体”中
现在从控制器你只需要推更新部分,它将自动更新
function onRefreshTime()
{
return [
'#Form-relationClassesManagePivotForm' => $this->renderPartial('pivot_form')
// or 'relation' => $this->renderPartial('pivot_form')
];
}
在这里,最好在呈现页面的同一控制器上编写此方法,因为它已经被定义为关系的定义,所以关系小部件已经生成
如果有任何困惑,请在评论中告诉我
使现代化
您需要在更新字段的控制器中添加此代码
return ['#myform' => $this->asExtension('RelationController')->onRelationClickManageListPivot()];
您需要从关系管理器中添加一个部分覆盖。
您可以看到我正在添加custm id='id'=>“myform”
_Relationship\u pivot\u form.htm(从Relationship manager复制并粘贴到控制器文件夹中)
&时代;
刷新部分
&时代;
我认为它应该做你的工作。如果它不起作用,那么我需要你的代码;)谢谢你找时间问我!不幸的是,我不知道你说的“透视数据表单”是什么意思,你已经定义了将呈现“关系”的部分,因此你可以更新该部分。“我没有为此定义分部:它由RelationController行为呈现。我可以从系统目录中复制该视图,并从控制器ajax处理程序中重新加载,但数据一致性会丢失…这并不意味着如果您没有添加它,那么它就不需要复制它,那么它的良好关系行为已经添加,所以它将从系统中拾取该部分。您可以尝试一下这个=>$this->relationRender(“”),它应该可以工作,明天我会在插件中自己尝试,我会更新答案:)嗯,我没有任何代码示例,但是你可以检查这些代码,并尝试从its变量和方法等中找到你想要的方式
<?php if ($relationManageId): ?>
<?= Form::ajax('onRelationManagePivotUpdate', [
'data' => ['_relation_field' => $relationField, 'manage_id' => $relationManageId],
'data-popup-load-indicator' => true,
'id'=>"myform"
]) ?>
<div class="modal-header">
<button type="button" class="close" data-dismiss="popup">×</button>
<h4 class="modal-title"><?= e(trans('backend::lang.relation.related_data', ['name'=>trans($relationLabel)])) ?></h4>
</div>
<div class="modal-body">
<?= $relationPivotWidget->render(['preview' => $this->readOnly]) ?>
<button
type="button"
data-request="onPivotRefresh"
class="btn btn-primary">
Refresh Partial
</button>
</div>
<div class="modal-footer">
<?php if ($this->readOnly): ?>
<button
type="button"
class="btn btn-default"
data-dismiss="popup">
<?= e(trans('backend::lang.relation.close')) ?>
</button>
<?php else: ?>
<button
type="submit"
class="btn btn-primary">
<?= e(trans('backend::lang.relation.update')) ?>
</button>
<button
type="button"
class="btn btn-default"
data-dismiss="popup">
<?= e(trans('backend::lang.relation.cancel')) ?>
</button>
<?php endif ?>
</div>
<?= Form::close() ?>
<?php else: ?>
<?= Form::ajax('onRelationManagePivotCreate', [
'data' => ['_relation_field' => $relationField, 'foreign_id' => $foreignId],
'data-popup-load-indicator' => true
]) ?>
<div class="modal-header">
<button type="button" class="close" data-dismiss="popup">×</button>
<h4 class="modal-title"><?= e(trans('backend::lang.relation.related_data', ['name'=>trans($relationLabel)])) ?></h4>
</div>
<div class="modal-body">
<?= $relationPivotWidget->render() ?>
</div>
<div class="modal-footer">
<button
type="submit"
class="btn btn-primary">
<?= e(trans('backend::lang.relation.add')) ?>
</button>
<button
type="button"
class="btn btn-default"
data-dismiss="popup">
<?= e(trans('backend::lang.relation.cancel')) ?>
</button>
</div>
<?= Form::close() ?>
<?php endif ?>