我也看到过类似的问题,但就我而言,它不起作用。 我有一个称为数据的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是正确的选择。与原始数据模型相同。当我再次更改combobx的选定值时,copyModel开始采用选定值。不知何故它被覆盖了。我不知道我在做什么错。有什么建议吗?我也尝试过使用JSON.strignify而不是extend。
答案 0 :(得分:1)
JSON模型默认具有两种绑定方式。因此,当您在ComboBox上触发诸如selectionChange之类的事件时,由于两种方式的绑定,模型的设置数据将不断更新。 Javascript还具有通过引用提供的对象,因此将更新原始的copyModel对象。
您可以通过将copyModel的副本设置为JSON模型来防止这种情况。
我想提到的另一件事是,不要一次又一次地设置模型。 您可以只更新设置到模型的数据并更新模型。 这可以通过两种方式完成。
a。
resetP: function(){
this.getView().getModel().setData(copyModel);
console.log(copyModel);
}
b。您还可以更新必需的属性并执行
this.getView()。getModel()。updateBindings();
答案 1 :(得分:0)
我们以这种方式使用jQuery.extend(true, {}, object_to_copy);
从想要独立副本的对象创建“深层副本”。