如何撤消已绑定到OData模型的表单中的用户更改?

Mah*_*ari 2 sapui5

我在SAPUI5中的主 - 详细信息应用程序中有一个表单.表单元素绑定到OData模型条目.我想在undo我的表单中添加一个按钮,如果用户更改了表单内部的数据并且他或她知道了更改,则在保存数据之前要撤消更改without refreshing页面,可以按下undo按钮并重新加载原始数据来自OData.

现在的问题是,是否有任何功能可以使用并刷新表单内的数据而无需连接到服务器或刷新页面?

我知道如何从Odata模型中读取数据并将其再次绑定到输入字段,我想知道是否还有更聪明的方法?

Ser*_*scu 5

这取决于您使用的ODataModel(即v1,v2或v4).我将假设您使用的是v2,因为v1现已弃用(请参阅文档),v4应与双向绑定一起使用.如果您仍在使用v1,我建议您转到v2.

您知道重置更改的三种可能性:

更新绑定

这是最简单的方法:v2.ODataModel有一个"updateBindings"方法,可用于重置对输入字段所做的所有更改.此方法的唯一参数应设置为true(以确保在控件上强制绑定更新).

//assuming that you are in a controller
this.getView().getModel().updateBindings(true);
Run Code Online (Sandbox Code Playgroud)

使用双向绑定

使用ODataModel的内置双向绑定,您可以通过setProperty方法收集对实体所做的更改(这是自动完成的,因为绑定使用此方法更新属性值).

当用户想要保留更改时,您可以使用submitChanges方法.要重置更改,正如注释中正确提到的那样,您可以使用resetChanges.

在我看来,这是一种更好的方法,因为在进行保存时,您不再需要手动构建更新调用体.相反,您依赖于ODataModel功能.当然,这意味着您必须稍微调整一下代码(更改默认绑定模式或特定绑定的绑定模式,替换getModel().update()调用).

做模型刷新

您可以使用刷新模型刷新OData模型的数据.这实际上会触发一个或多个后端请求,因此它不适合您的情况(正如您所说,您不想提出任何服务器请求).

//assuming that you are in a controller
this.getView().getModel().refresh(true, false);
Run Code Online (Sandbox Code Playgroud)