如何使JSON模型为只读?

2020-09-07 02:36发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

在我的SAPUI5应用中,我有一个json模型(在清单中定义),它是从本地存储的json文件中获取数据的。

" oDefaultModel":{
 " type":" sap.ui.model.json.JSONModel",
 " uri":" model/defaultModel.json",
 "设置":{
 " defaultBindingMode":" OneTime"
 }
 },
 

此模型具有一些东西的默认值,这些东西应该始终保持不变。 然后,我有一个绑定到后端系统中数据的自定义控件,然后从后端读取数据

 var oData = this.getBinding(" data");
 如果(oData){
 var aData = oData.getContexts()。map(function(oContext){
 返回oContext.getObject();
 });
 

然后我使用循环将来自后端的数据与默认模型数据合并在一起,并在必要时用来自后端的数据替换默认值。

这在第一次通过时就可以正常工作...但是只要我更改上下文,即单击列表中的另一个项目,就好像默认模型已更新一样! 现在,默认模型包含最后一个上下文中的值,而不是默认值。

如何防止此默认模型被更新,即使其只读?

谢谢!

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

在我的SAPUI5应用中,我有一个json模型(在清单中定义),它是从本地存储的json文件中获取数据的。

" oDefaultModel":{
 " type":" sap.ui.model.json.JSONModel",
 " uri":" model/defaultModel.json",
 "设置":{
 " defaultBindingMode":" OneTime"
 }
 },
 

此模型具有一些东西的默认值,这些东西应该始终保持不变。 然后,我有一个绑定到后端系统中数据的自定义控件,然后从后端读取数据

 var oData = this.getBinding(" data");
 如果(oData){
 var aData = oData.getContexts()。map(function(oContext){
 返回oContext.getObject();
 });
 

然后我使用循环将来自后端的数据与默认模型数据合并在一起,并在必要时用来自后端的数据替换默认值。

这在第一次通过时就可以正常工作...但是只要我更改上下文,即单击列表中的另一个项目,就好像默认模型已更新一样! 现在,默认模型包含最后一个上下文中的值,而不是默认值。

如何防止此默认模型被更新,即使其只读?

谢谢!

付费偷看设置
发送
3条回答
My梦
1楼-- · 2020-09-07 02:44

如果没什么大不了的话,只需在开头复制一个副本

字符串化然后解析

Violet凡
2楼-- · 2020-09-07 03:00

一份数据。

半个程序猿
3楼-- · 2020-09-07 03:01

嗨,

您可以做的是在.json文件中添加"默认"和"当前"属性。

例如 而不是写入.json文件:

 {"主页":" https://www.sap.com"} 

写:

 {
 "默认":{
 "主页":" https://www.sap.com"
 },
 "当前":{}
 } 

在绑定中,您必须更改路径,例如:" {dummy>/current/homepage}"而不是" {dummy>/homepage}"

在初始化期间,将数据从默认复制到当前:

 var oDefault = this.getView()。getModel(" dummy")。getProperty("/img/default");

 this.getView()。getModel(" dummy")。setProperty("/img/current",$ .extend({},oDefault)); 

然后,当您需要将默认值与从后端检索的值合并时:

 var oNew = {
 主页:" www.belgium.be"
 }; //数据来自后端

 var oDefault = this.getView()。getModel(" dummy")。getProperty("/img/default");

 this.getView()。getModel(" dummy")。setProperty("/img/current",$ .extend({},oDefault,oNew)); 

这样,/default/homepage保持为" www.sap.com ", 仅将"/img/current/homepage"更新为" www.belgium.be "。

一周热门 更多>