我见过类似的问题,但就我而言,它不起作用。 我有一个名为 data 的 JSON 模型,它对应于带有组合框的 SAPUi5 表单。我想在第一次打开应用程序时复制模型的状态并保持原样。之后,我想用它来重置我的表单并将组合框恢复为默认值。 当我第一次启动我的应用程序时:
this.getView().setModel(new JSONModel(data)); //create the original model
//copy the original model (copyModel is global variable
copyModel = $.extend({}, data);
到这里一切都很好。这两个模型完全相同。之后我有一个按钮和一个重置功能:
resetP: function(){
this.getView().setModel(new JSONModel(copyModel));
console.log(copyModel);
}
我第一次在组合框中选择某些内容并单击重置按钮并运行重置功能时,复制模型是正确的。与原始数据模型相同。当我再次更改组合的选定值时,copyModel 开始采用选定的值。不知怎的,它被覆盖了。我不知道我做错了什么。有什么建议吗?我还尝试使用 JSON.strignify 而不是扩展。
最佳答案
JSON 模型默认有两种方式绑定(bind)。因此,当您在 ComboBox 上触发诸如选择更改之类的事件时,由于双向绑定(bind),模型的设置数据会不断更新。此外,Javascript 还具有引用对象,因此更新的是原始的 copyModel 对象。
您可以通过将 copyModel 的副本设置为 JSON 模型来防止这种情况。
我想提的另一件事是,不要一次又一次地设置模型。 您只需更新为模型设置的数据并更新模型即可。 这可以通过两种方式完成。
a.
resetP: function(){
this.getView().getModel().setData(copyModel);
console.log(copyModel);
}
b.您还可以更新所需的属性并执行
this.getView().getModel().updateBindings();
关于javascript - 克隆 sapUi5 json 模型并停止绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52557559/