SAPUI5 oDataModel setDeferredGroups自动填充请求

时间:2017-09-20 23:58:16

标签: javascript sapui5

当我有oDataModel v2双向绑定并且我调用 setDeferredGroups()方法时,它会将所有数据更改的默认行为更改为不再被推迟。

我们可以在this documentation的“双向绑定”下看到:

“默认情况下,所有更改都在名为”changes“的批处理组中收集,并设置为deferred。要提交更改,请使用submitChanges()。”

这是事实。如果我调用函数 setDeferredGroups(),那么我的所有数据更改都会自动触发任何请求。在按预期手动调用 oModel.submitChanges()之前,不会发送任何请求。

现在在“批处理”标题下的同一篇文章中:

“对于每个绑定和每个手动请求,可以指定groupId。属于同一组的所有请求都捆绑在一个批处理请求中。没有groupId的请求捆绑在默认批处理组中。” EM>

我决定通过给他们一个groupId来推动一组更改,所以我像这样调用指南中所示的函数:

oModel.setDeferredGroups(["myGroupId"]);

然后,例如,我创建一个这样的条目:

oModel.createEntry("/RANDOM_ENTITY", {
    groupId : "myGroupId"
});

我根本没有改变任何其他代码。这按预期工作,我可以调用传递groupId的 submitChanges()函数:

oModel.submitChanges({
    groupId : "myGroupId"
});

现在的问题是,在执行此操作时,它会将未设置此groupId的所有更改的默认行为设置为不延迟(尽管所有更改都是标准延迟)。默认情况下,所有更改都会延迟,但如果您调用此函数,则会更改它,以便对给定groupId的更改进行更改。

这意味着每次更改任何实体的数据而不设置groupId时,它都会触发对服务器的请求。例如。更改屏幕上的双向绑定字段将在第二次失去焦点时发送网络请求。而不是等我打电话给 oModel.submitChanges()

所以我的问题是:

  1. 有没有办法将所有请求的默认行为设置为延迟?
  2. 如果不是通过设置groupId,我如何 submitChanges()更改的子集?

1 个答案:

答案 0 :(得分:1)

结果显示名为“更改”的默认延期群组'被'setDeferredGroups'覆盖但可以先通过' getDeferredGroups'。

检索

所以我需要:

oModel.setDeferredGroups(oModel.getDeferredGroups().concat(["myGroupId"]));